언어/Golang
-
[Golang] 날짜 계산, 포맷 변경하기언어/Golang 2018. 12. 19. 21:30
Go언어에서 날짜계산이나 포맷변경은 극악입니다. 실제로 검색해보면 욕 한바가지 써놓은 것을 쉽게 볼 수 있습니다. 현재날짜 가져오기기본 현재날짜, utc, unix 별로 가져오는 로직입니다.package main import ( "fmt" "time" ) func main() { now := time.Now() nowUTC := time.Now().UTC() nowUNIX := time.Now().Unix() fmt.Println(now) fmt.Println(nowUTC) fmt.Println(nowUNIX) } // 결과 // 2018-12-19 20:42:08.219845 +0900 KST m=+0.000394187 // 2018-12-19 11:42:08.219846 +0000 UTC // 154..
-
[Golang] struct 리스트로 반환하기언어/Golang 2018. 12. 18. 23:39
struct 성질을 까먹고 한참 삽질하다가 정리하던 도중 중요한 부분을 기억했습니다...........GO에서 struct를 선언하는 방식은 여러가지가 있습니다. struct 성질을 먼저 복기한 후, struct를 리스트로 반환하는 코드를 설명하겠습니다.1. 빈 struct 객체 먼저 생성 후 데이터 채우기Article이란 빈 객체를 생성 후 데이터를 삽입하는 코드입니다.type Article struct { Title string } func main() { article := Article{} article.Title = "test" }2. GO 내장함수 new() 사용GO 내장함수인 new() 메소드를 사용하여 생성합니다.type Article struct { Title string } func m..
-
[Golang] golang에서는 WSGI를 사용하지 않은 이유언어/Golang 2017. 4. 19. 16:20
일단 WSGI는 파이썬에만 해당이 됩니다. Go에는 3가지 옵션이 있습니다. (실제로는 4가지지만 일반적으로 CGI는 높은 부하로 인해 뺐습니다.)Go의 표준 라이브러리에 내장 된 HTTP 서비스 기능.이 경우 앱은 독립 실행형 서버입니다. 가장 간단한 설정 일 수도 있지만 다음과 같은 문제가 있을 수 있습니다. 다운그레이드 권한으로 권한이 부여된 포트(1024 아래의 포트, 예를들어 80포트)를 가진 앱을 실행하려면, 특별한 wrapper나 POSIX 기능을 사용해야합니다.연결을 끊지 않고 재배포를 하려면 goagain과 같은 다른 wrapper가 필요합니다.웹 서버 형태의 reverse HTTP proxy 문제가 존재대부분 독립 실행형의 다양한 문제를 해결하지만, 그래도 전체 HTTP 트래픽을 이리저..
-
[Golang] gin-gonic 헤더 Access-Control-Allow-Origin 여러개 추가 방법언어/Golang 2017. 3. 20. 13:49
CORS 정책상 Access-Control-Allow-Origin은 1개만 등록이 가능합니다. Origin을 *로 할 경우 전 URL에 대해 허용이 가능하지만 아래와 같은 경우면 특정 URL을 지정해야 합니다.c.Header("Access-Control-Allow-Credentials", "true") c.Header("Access-Control-Allow-Origin", "*") // 에러 - Credentials이 true일 경우 특정 URL 1개만 허용 필자가 사용한 방법은 허용할 URL 리스트를 만든 다음, 요청된 URL이 해당 리스트에 맞는지 체크하는 형식으로 문제를 해결했습니다.allowUrlList := []string{"http://foo.com", "http://bar.com", "htt..
-
[Golang] gin-gonic DELETE 메소드 데이터 호출방법언어/Golang 2017. 3. 17. 17:56
간단한 문젠대..GET gin-gonic 웹 프레임워크에서 GET은 .Query()함수로 query parameter로 넘어온 데이터를 받습니다.http://foo.com?id=1234 ... a := c.Query(id)POSTPOST의 경우 body로 넘어온 데이터를 받습니다.http://foo.com # body 부분 {id:1234} ... a := c.PostForm("id")DELETEgin-gonic에서 DELETE 메소드는 무조건 query parameter로 데이터를 넘겨야합니다. body로 데이터를 넘겨줄 경우 이를 인식하지 못합니다.http://foo.com # body 부분 {id:1234} ... a := c.PostForm("id") // nil http://foo.com?id=..
-
[Golang] gin-gonic CORS 문제 해결방법언어/Golang 2017. 3. 17. 16:57
먼저 CORS에 대한 개념이 어느정도 존재한다는 가정하에 진행합니다.TEST 환경자바스크립트 -> Go Gin-gonic API를 요청하는 상황입니다.Request Headersvar req = new XMLHttpRequest(); req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req.withCredentials = true; req.setRequestHeader("Authorization", "Bearer "+$.cookie("AUTH_A_TOKEN"));Response Headersc.Header("Access-Control-Allow-Headers", "Content-Type, Authorization, Ori..
-
[Golang] 고루틴언어/Golang 2017. 2. 22. 20:40
개요고루틴은 가벼운 스레드와 같은 것으로 현재 수행 흐름과 별개의 흐름을 만들어줍니다. "go" 키워드를 사용하여 함수를 호출하면, 런타임시 새로운 goroutine을 실행합니다. goroutine은 비동기적으로(asynchronously) 함수루틴을 실행하므로, 여러 코드를 동시에(Concurrently) 실행하는데 사용됩니다.goroutine은 OS 쓰레드보다 훨씬 가볍게 비동기 Concurrent 처리를 구현하기 위하여 만든 것으로, 기본적으로 Go 런타임이 자체 관리합니다. Go 런타임 상에서 관리되는 작업단위인 여러 goroutine들은 종종 하나의 OS 쓰레드 1개로도 실행되곤 합니다. 즉, Go루틴들은 OS 쓰레드와 1 대 1로 대응되지 않고, Multiplexing으로 훨씬 적은 OS 쓰레..
-
[Golang] 인터페이스 (Interface)언어/Golang 2017. 2. 20. 20:19
구조체(struct)가 필드들의 집합체라면, interface는 메서드들의 집합체입니다. interface는 타입(type)이 구현해야 하는 메서드 원형(prototype)들을 정의합니다. 하나의 사용자 정의 타입이 interface를 구현하기 위해서는 단순히 그 인터페이스가 갖는 모든 메서드들을 구현하면 됩니다. 인터페이스의 이름은 보통 변수에 ~er이 붙습니다. ex) printer interface {}인터페이스는 struct와 마찬가지로 type 문을 사용하여 정의합니다.type Shape interface { area() float64 perimeter() float64 }구현예제 1인터페이스를 구현하기 위해서는 해당 타입이 그 인터페이스의 메서드들을 모두 구현하면 되므로, 위의 Shape 인터..