19

[Go/Golang] Golang의 문자열 읽기에 관한 고찰(Reader, Scanner, Scanln)

Golang의 문자열 읽기에 관한 고찰 bufio 패키지의 bufio.NewReader(os.Stdin) ReadLine() 메서드 ReadLine() 메서드는 os.Stdin으로부터 읽어 들인 데이터를 []Byte 형으로 리턴합니다. ReadLine 메서드를 사용할 땐 buffer의 크기 등 다양하게 고려해야 하는 케이스들이 많습니다. 이러한 이유에서 bufio.go 파일을 확인해보면 다음과 같은 내용이 있습니다. ReadLine is a low-level line-reading primitive. Most callers should use ReadBytes('\n') or ReadString('\n') instead or use a Scanner. ReadLine 메서드는..

IT/Go 2021.03.08

[Go/Golang] Echo 프레임워크에서 CORS 관련 설정하기

Go Echo 프레임워크에서 CORS 관련 설정하기 웹 개발을 하다보면 종종 CORS (Cross-Origin Resource Sharing) 을 마주치곤 합니다. CORS 정책을 위반하였다는 에러를 마주치면 당혹스럽긴 합니다. 단순한 작업일 뿐인데도 정상적으로 수행되지 않는 코드를 보면 야속하기까지도 합니다. 다만 오늘은 CORS에 관한 내용을 다루려는 것은 아닙니다. 오늘은 Echo 프레임워크를 이용할 때, CORS 관련 설정은 어떻게 수행하면 되는지 정리해보도록 하겠습니다. 모든 원격지, 모든 메서드 허용 Echo 프레임워크는 기본적으로 모든 원격지로부터 오는 모든 메서드를 허용합니다. 이 때는 다음과 같이 명시적으로 써줘도 괜찮습니다. 소스 코드 1 func main() { e := echo.Ne..

IT/Go 2021.03.04

[Go/Golang] echo 프레임워크를 이용해 Parameter 받는 방법(Query Param, Path Val)

echo 프레임워크를 이용해 Parameter 받는 방법(Query Param, Path Val) URI를 이용해서 인자를 전달하는 방법은 여러 가지가 있습니다. 가장 대중적으로 사용하는 Query Parameter와 Path Variable에 대해 정리해보겠습니다. Query Parameter 입력 http://localhost:8080/users/?name=wookii&age=27위와 같이 Query Parameter의 형태로 전달받은 데이터는 echo.Context.QueryParam() 메서드나 echo.Context.QueryParams() 메서드로 처리할 수 있습니다. 소스 코드 1 type users struct { name string age int } func queryParamHandl..

IT/Go 2021.03.03

[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