프로그래밍 언어

    Go: 개발 환경과 도구, 크로스 컴파일

    환경변수 Go 를 사용하면서 알아두어야 할 일부 환경변수가 있는데, 알아보도록 하자. 콘솔에 go env 를 입력하면 아래와 같이 Go 에서 사용하는 환경변수 목록을 확인할 수 있다. 다 살펴볼 필요는 없지만, GOROOT, GOPATH, GOBIN, GOARCH, GOOS 정도는 알아두면 개발할 때 도움이 된다. 게다가 GOOS, GOAHCH 는 크로스 컴파일(Cross-Compile)을 할 때도 지정하는 환경변수이기도 하다. $ go env set GO111MODULE= set GOARCH=amd64 set GOBIN= set GOCACHE=C:\Users\user\AppData\Local\go-build set GOENV=C:\Users\user\AppData\Roaming\go\env set GO..

    Go: path vs path/filepath

    path vs path/filepath Go 에서 경로를 핸들링 할 수 있는 패키지에는 path, path/filepath 패키지가 있다. 이 둘은 쓰임새가 달라서 조심씨 사용하여야 하는데, 둘이 경로라는 대상을 다루지만, 실은 핸들링하는 대상이 다르다. 결론부터 말하자면 path 는 HTTP, FTP 경로 등 논리적인 경로를 핸들링한다, 즉 슬래쉬로 구분되는 경로에 대해서 다루며, 반면 path/filepath 패키지는 이름 그대로 실질적인 파일 경로를 취급하게 된다. Windows 같은 경우에는 C:\ 등으로 파일 경로가 시작되기도 하기 때문에 각별히 주의해야 할 필요가 있다. data/hello.txt 파일에는 Hello, Go! 라는 텍스트가 입력되어 있다고 가정하고, 아래의 코드를 살펴보자. 파..

    Go: flag 패키지로 CLI 도구 만들기

    flag Go 의 flag 패키지는 CLI(Command Line Interface) 어플리케이션을 작성하기 위해 사용하는 내장 패키지이다. 주로 서브 커맨드가 없는 싱글 커맨드에 대해 옵션을 지정하여 사용할 때 사용한다. 가장 간단한 사용법은 아래와 같다. 예를 들어 사용자에게 --port, --p 옵션을 통해 포트를 지정할 수 있는 옵션을 지정하여 값을 받는다고 생각해보자. package main import ( "flag" ) func main() { var port int flag.IntVar(&port, "port", 3000, "") flag.IntVar(&port, "p", 3000, "") flag.Parse() } 어플리케이션의 코드가 main.go 라고 가정해보면 다음과 같이 사용할 수..

    Go: Go 답게 코드 작성하기

    Go 언어는 C언어를 일부 계승하였기 때문에 다른 언어와는 사용법이 상당히 달라서 자바와 같이 전통적인 객체지향적 프로그래밍에 익숙한 경우라면 적응하기 어려울 수도 있다. 특히 Go 에는 예외가 없고 에러로만 처리하는 것도 그렇지만, 에러의 처리 방식이 다소 호불호가 갈리는 방식이기 때문에 이를 단점으로 삼는 사람도 있는 것 같다. 에러에 대한 내 의견 또한 아래에서 언급해볼 것이다. Effective Go 을 읽어보면 더욱 좋겠지만, 그와 관련된 포스트는 이후에 이야기해보도록 하자. https://gosudaweb.gitbooks.io/effective-go-in-korean/content/ README · Effective Go in Korean gosudaweb.gitbooks.io panic 은 ..

    Go: 고루틴과 채널 (go-routine, chan)

    Go 에서 동시성을 제어하는 일은 너무나도 쉽다. 너무 쉬워서 남발하는 경우까지 나올 정도로 쉬운데, Go 의 동시성은 고루틴(go-routine)이라고 하는데, 이는 OS 스레드를 한 번 더 추상화한 코루틴(co-routine)이다. 이러한 동시성은 멀티 프로세서를 사용하여 실행하거나 문맥교환(Context-Switching)을 통해 동시에 실행되는 것처럼 행동한다. 고루틴과 채널에 대한 내용은 상당히 길기때문에 해당 포스팅에서 전부 이야기할 수는 없을 것이라 여기서는 기초적인 것만 이야기하고, 더 자세한 것은 이후의 포스트에서 다룰 예정이다. go & go-routine main() 함수도 사실은 main() 고루틴이다. 이러한 고루틴을 실행하는 것은 아주 간단한데, 단순히 그냥 go 키워드만 붙여주..