본문 바로가기

Go

(12)
[golang] haversine & bearing [1. 개요] [2. 코드 - haversine distance] [3. 코드 - bearing]
Go project 생성 가이드 [1. 개요] go 를 이용하여 개발하는 경우, 특히 go mod 를 이용하여 프로젝트 설정을 하는 경우의 과정을 정리 go version 은 1.17 이상 환경을 타겟으로 한다. go 는 GOPATH 를 이용한 개발 방식이 존재함. 그러나 외부 모듈 사용 시, 필요 한 패키지를 일일히 설치 할 필요가 있음(?) 그러나 go mod 를 사용하면 이런 번거로움을 해결할 수 있다고 봄. https://testkernelv2.tistory.com/284 테스트 한 환경은 아래와 같다. GOVERSION = go1.17.3 GO111MODULE = on [2. go mod 명령어] go mod 명령어 실행 시, 다양한 command 를 확인 할 수 있다. go mod init {패키지_이름} # 현재 디렉터리의..
비트연산 [1. 개요] golang 에서 bit 연산 방식을 정리한다. [2. 문제] https://www.acmicpc.net/problem/11723 [3. 특이점] bit 를 반전 시킬 때, C++ 에서는 ~ 연산자를 사용하였는데, go 에서는 ^ 를 사용해야 한다. [4. 코드]
go build 옵션 [1. 개요] go 로 코드 작성 후, 컴파일 시 유용한 옵션 정리 [2. 예제] trimpath go build --trimpath go 언어에서 panic() 호출 시, 예외가 발생했을 때, stack trace, source file name, line number 등을 출력해주는데, source file name 이 compile 한 환경의 절대 경로로 출력된다. 이 때, --trimpath 를 사용하면, 절대 경로 대신, source file 이름만 출력된다. # 정확히는 좀 다른데, 쉽게 생각하면 위와 같다.
go heap container https://testkernelv2.tistory.com/313
go mod go mod init "{~~~}" => go.mod 파일 생성 됨 go mod tidy => 외부 패키지 다운로드 add missing and remove unused modules go mod edit => edit go.mod from tools or scripts => -replace
GO111MODULE go get 은 1.17 이후로 바이너리 설치에 사용되지 않을 것이고, 1.18 에서는 사용이 불가능할 것이다. 1.16 이상을 사용하는 경우는 go install @latest 를 사용해야 한다. GOPATH 초기 go 는 package manager 없었고, go get 이 모든 소스들을 fetch 하고 $GOPATH/src 에 저장하였다. 여기서 버전은 따로 없었고, master branch 만이 package 의 안정버전을 의미했다. Go Modules Go Modules 는 go 1.11 에 처음 소개되었다. 모든 package 의 git checkout 저장을 위해 GOPATH 를 사용하는 것 대신에 Go Modules 는 tag된 버전을 go.mod 를 통해 추적했다. (go.mod 파일에 ..
go 패키지 설치, 관리 [1. 개요] go 에서 외부 패키지 관리를 위한 get, install 에 대해서 정리한다. go version 이 1.17.3 이하에서는 확인 안됨. 1.16 버전 이후로~~~ GO111MODULE=off go env -w GO111MODULE=off => 원하는 의도되로 잘 됨 => 단, 버전을 명시할 수 없다. go env -w GO111MODULE=on go env -w GO111MODULE= go env -w GO111MODULE=auto github.com/segmentio/kafka-go github.com/segmentio/kafka-go@v0.4.33 go get has been deprecated for installing binaries since Go 1.17 and will be..
ubuntu go version update [1. go 설치] $ sudo apt install golang $ go version => 1.13.8 $ which go => /usr/bin/go $ ls -l /usr/bin/go => /usr/lib/go-1.13/bin/go [2. go update 패키지 다운] https://go.dev/dl/ 원하는 버전에 해당하는 archive 파일을 위 페이지에 접속한 후 찾아서 다운로드 $ tar -zxvf go1.15.6.linux-amd64.tar.gz $ mv go go-1.15.6 $ sudo mv go-1.15.6 /usr/lib $ sudo update-alternatives --install /usr/bin/go go /usr/bin/go-1.15.6/bin/go 40 $ update-..
cgo [1. 개요] cgo 는 C code 를 호출하는 go package 의 생성을 가능하게 한다. 일반적으로 cgo 를 사용하기 위해 go 소스코드를 작성하는 방법은 pseudo 패키지 "C" 를 import 하는 것이다. => import "C" CFLAGS, CPPFLAGS, CXXFLAGS, FFLAGS, LDFLAGS 등이 #cgo directive 내에 정의 될 수 있다. pkg-config 로 관리 할 수도 있다. gcc 가 사전에 PC 에 설치되어 있어야 한다. go env 시 CC 와 CXX 가 각각 gcc 와 g++ 로 설정되어 있다. [2. 예제] 위와 같이 go 소스코드에서 주석에 C 코드를 작성한다. 그리고 유의사항이 한가지 있는데, C 코드를 감싸는 주석과 import "C" 는 반..