[번역글] init functions in Go

원문 : https://medium.com/golangspec/init-functions-in-go-eac191b3860a init functions in Go Identifier main is ubiquitous. Every Go program starts in a package main by calling identically named function. When this function returns… medium.com 전체 내용은 원문에서 확인하실 수 있으며, 또 내용 중 일부 오역이 포함되어 있을 수 있으니, 가능하면 원문을 참조하시는 걸 추천드립니다. main은 어디에나 있습니다. 모든 Go 프로그램은 패키지에서 main이라 불리는 함수에서 시작합니다. 이 main 함수가 리턴할 때, 프로그..

Special value #ZgotmplZ

Go에서는 HTML을 출력하기 위해서 html/template 패키지를 사용합니다. html/template 패키지의 소개에 보면 맨 첫줄에 "Package template (html/template) implements data-driven templates for generating HTML output safe against code injection."라고 적혀 있습니다. 즉, html/template 패키지를 이용하여 데이터를 포함한 HTML코드를 만들 때, 데이터의 특수 문자를 escaping하여, 출력된 화면에서 원치 않는 코드가 실행되는 것을 막을 수 있다는 의미입니다. 예시를 보면 더 잘 이해할 수 있습니다. import "html/template" ... t, err := templat..

GitHub OAuth 구현하기 (3)

2020/07/04 - GitHub OAuth 구현하기 (1) 2020/07/07 - GitHub OAuth 구현하기 (2) 에서 이어집니다. GitHub OAuth 구현을 실제 소스코드를 통해서 설명하려고 합니다. ( 사용한 언어는 Golang 이지만, 다른 언어를 사용하더라도 비슷한 방식으로 구현할 수 있습니다. ) 먼저 init() 함수에서 OAuth관련 설정을 해 줍니다. 여기서 만든 설정은 전체 앱에서 사용합니다. var OAuthConf *oauth2.Config func init() { OAuthConf = &oauth2.Config{ ClientID: "{{ oauth app client id }}", ClientSecret: "{{ oauth app client secret }}", Re..

왜 http.handleFunc가 두번 호출될까?

Go로 간단한 테스트 페이지를 만들었는데, http.HandleFunc가 두번 호출되는 현상을 발견했습니다. 전부가 그런건 아니었고, 한 개의 핸들러만 두 번씩 호출되었는데, 그 원인은 의외로 간단했습니다. 먼저 코드는 대충 이렇게 생겼습니다. func main() { http.HandleFunc("/", RenderMainView) log.Fatal(http.ListenAndServe(":8000", nil)) } func RenderTemplate(w http.ResponseWriter, name string, data interface{}) { tmpl, _ := template.ParseFiles(name) tmpl.Execute(w, data) } func RenderMainView(w http..

GitHub OAuth 구현하기 (2)

2020/07/04 - GitHub OAuth 구현하기 (1) 에서 이어집니다. GitHub OAuth의 인증을 진행하기 위해, 3가지 파일을 만들었습니다. main.go : 앱의 라우팅 및 OAuth 인증을 진행하기 위한 코드 login.html : "GitHub으로 로그인하기" 버튼을 보여주며, 인증 되지 않은 사용자가 처음 접하는 화면입니다. main.html : GitHub으로부터 인증 받은 이후 처음 보여질 화면입니다. main.go에서 정의한 라우팅은 http.HandleFunc("/", MainHandler) http.HandleFunc("/auth", AuthHandler) http.HandleFunc("/auth/callback", CallbackHandler) log.Fatal(http..