Golang 37

[Go/Golang] JSON 데이터 형식에 맞춰 Struct를 자동으로 생성해주는 사이트

[Go/Golang] JSON 데이터 형식에 맞춰 Struct를 자동으로 생성해주는 사이트 API 서버 개발 API 서버 개발을 하다보면, JSON 데이터를 주고 받을 일이 참 많습니다. Python에서는 딕셔너리 자료로 거의 대부분의 작업이 가능했지만, Go는 그렇지 않습니다. json.Unmarshal() Go에서 JSON 데이터를 받아 어떤 의미 있는(논리적인) 데이터 형식으로 변환하기 위해선 json.Unmarshal() 을 사용합니다. 다만 이렇게 json.Unmarshal() 메서드를 사용하려면 우리가 주고받는 JSON 데이터가 어떻게 생겼는지 Go가 알고 있어야 합니다. 우리는 이를 위해 Go에 JSON 데이터 형식과 일치하는 Struct를 생성해둘 수 있습니다. JSON-TO-GO 하지만 ..

IT/Go 2021.03.02

[Go/Golang] Raw(`) string과 Interpreted(") string의 차이점을 알아보자

Golang에서 String을 표현하는 방법에는 두 가지가 있습니다. Double Quote (") - Interpreted string 첫 번째는 흔히 사용하는 쌍따옴표(double-quote, ") 방식입니다. Go에서는 쌍따옴표로 열리고 닫힌 string을 Interpreted string이라 부릅니다. 예를 들자면 이렇습니다. interpretedString := "interpreted string" Backtick (`) - Raw string 두 번째는 역따옴표(backtick, `) 방식입니다. 역따옴표로 열리고 닫힌 string은 Raw string이라 합니다. 예를 들자면 이렇습니다. rawString := `raw string` 차이점 Interpreted string double qu..

IT/Go 2021.02.22

[Go/Golang] go test 실행 시 gcc 에러가 발생하는 경우(mac, windows, linux)

vscode로 testing을 수행하다 -v 옵션을 주는 방법을 찾을 수가 없어서, windows 터미널에서 wsl을 켜고 go test -v를 수행했는데 에러가 발생했다. cgo: exec gcc: exec: "gcc": executable file not found in $PATH 이런 에러가 발생하는 경우, 간단하게 해결 가능하다. CGO이기 때문에 GCC로 컴파일 등을 해야하는데, GCC가 없어서 발생하는 에러이기 때문이다. 다음의 패키지를 설치해주자. sudo apt-get install -y build-essential

IT/Go 2021.02.19

[Go/Golang] go get 과 go install 은 어떻게 다른 것일까?

go install vs. go get Golang을 사용하다보면 go get 명령과 go install 명령을 자주 마주친다. 이참에 차이를 알아보고자 정리해보았다. go install은 local에서 작업할 때 이용하는 명령어이다. 예를 들어, 어떤 라이브러리를 사용하고자 하는데 몇몇 이유로 인해 해당 라이브러리에 수정이 필요한 경우 다음과 같은 워크플로우를 가져갈 수 있다. go get -d library - 라이브러리를 다운로드만 받음. 다운로드 받은 library에 필요한 수정 사항을 반영 go install library - 로컬 버전의 라이브러리를 설치. 정리하자면, go get 명령어는 외부에 위치한 패키지를 다운로드 받고 수정하는 것은 불가능하다. 따라서 go get은 go install..

IT/Go 2021.02.19

[Go/Golang] Go 1.16 부터 io/ioutil 패키지가 deprecated 됩니다.

오늘 Go 1.16이 릴리즈 되고 나서 릴리즈 노트를 읽던 중에 io/ioutil이 지원 중단될 예정이라는 걸 보았다. (참고 : Go 1.16 Release Notes - The Go Programming Language (golang.org)) 릴리즈 노트에는 다음과 같이 기록되어 있다. The io/ioutil package has turned out to be a poorly defined and hard to understand collection of things. All functionality provided by the package has been moved to other packages. The io/ioutil package remains and will continue to wo..

IT/Go 2021.02.18

[Go/Golang] Go 1.16 정식 Release! Apple Silicon Mac Native 지원

드디어 Go 1.16이 릴리즈 되었다! 가장 눈에 띄는 것부터 짚어 보자면, Go 1.16 부터는 Apple Silicon Mac의 ARM64 아키텍처를 네이티브로 지원하여, 더 이상 Rosetta를 이용하지 않아도 된다. Go 1.16 부터는 Go module을 디폴트로 사용하게 되었다. 2020 Go Developer Survey에 따르면 이미 Go 개발자의 96%가 Go module을 사용하는 쪽으로 전환하였다는 답변을 했다고 한다. Go 1.16은 기존 버전보다 최대 25% 더 빠르고 메모리를 15% 적게 사용하게 되었다고 한다. 이외에도 다양한 수정사항이나 발전사항이 있으니 추후 포스팅에서 작성해봐야겠다! 그동안 Go 1.16 RC 를 사용해오던 유저로서, 정식 버전을 사용할 수 있게 되어 너무..

IT/Go 2021.02.18

[Go/Golang] Go Slice에서 중복 제거 하기(struct 활용)

Python에서 중복을 제거할 땐 원소의 위치가 중요하지 않다면, 셋으로 변환한 후, 다시 리스트로 변환해주면 중복을 제거할 수 있다. Go에서는 이런 트릭은 따로 존재하지 않는다. 따라서 직접 로직을 구현해야 한다. (요즘 Go에 푹 빠져서 살고 있는데, 이런 점이 매력인 것 같다) 아래는 String 타입의 Slice에서 중복을 제거하는 코드이다. 다른 자료형의 Slice라면 해당 자료형에 알맞은 코드를 구현하면 된다. func makeSliceUnique(s []string) []string { keys := make(map[string]struct{}) res := make([]string, 0) for _, val := range s { if _, ok := keys[val]; ok { cont..

IT/Go 2021.02.14