본문 바로가기

Language/GoLang

[learning go] 1. 개발환경 설정하기

1. 맥북에 설치하기

brew install go
➜  ~ go version
go version go1.22.1 darwin/arm64
➜  ~ which go
/opt/homebrew/bin/go

 

2. go 작업 공간

  • go install -> 단일 작업 공간(workspace)가 있어야 한다.
    • 기본 디렉터리 : $HOME/go
    • go 패키지 예제 코드 : $HOME/go/src
    • 컴파일한 바이너리 : $HOME/go/bin
    • GOPATH를 명시적으로 설정, $GOPATH/bin을 실행가능한 경로로 환경변수에 추가하자. 작업 공간의 위치를 명확하게 한다.
    • $GOPATH 환경변수를 설정 - go install로 설치된 서드 파티 도구들을 쉽게 실행하도록 해준다.
vi ~/.zshrc
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"

 

  • 책에서는 gopath를 사용하라고 가이드하고 있으나, go 1.11부터는 go modules가 추가되었다.
    • 프로젝트 루트 디렉토리에 go.mod 사용해서 의존성 정보를 저장하고 go get을 통해 가져온다.
    • 프로젝트간 충돌 관리 측면에서 의존성을 가져오고 관리할 수 있다.
  • go run : 임시 디렉터리에 컴파일된 바이너리를 만들고, 실행 종료시 삭제한다. (테스트시 사용)
  • go build : 명령을 수행한 디렉터리에 바이너리를 만든다. (배포 위한 바이너리 생성시 사용)
  • go install : 작업 공간에 소스를 받아 빌드/설치 가능하다.
    • maven, NPM같은 중앙 호스팅 서비스에 의존하지 않아도 된다. (프로젝트에 필요한 외부 패키지를 직접 가져와서 사용할 수 있다.)
    • 버전 업데이트도 동일한 명령어를 사용한다.
    • go install로 설치할 수 있도록 만들면 배포할 필요없이 편하게 받을 수 있다.
➜  go install github.com/rakyll/hey@latest
go: downloading github.com/rakyll/hey v0.1.4
go: downloading golang.org/x/net v0.0.0-20181017193950-04a2e542c03f
go: downloading golang.org/x/text v0.3.0

/Users/go
➜  go ls
bin pkg

➜  ./hey https://www.golang.org

Summary:
  Total:	2.5956 secs
  Slowest:	0.0000 secs
  Fastest:	0.0000 secs
  Average:	 NaN secs
  Requests/sec:	77.0521
  • go의 주요 설계 목표 중 하나 : 효율적인 코드 작성
    • 표준 포맷을 강제 - 컴파일러 단순화
    • go fmt - 포맷 정렬
    • goimports - import 정렬 및 제거
    • 세미콜론 삽입 규칙
      • go는 모든 구문 끝에 세미콜론이 있어야 한다.
      • 식별자, 기본 리터럴, break, continue, fallthrough, return, ++, --, ), } 뒤에는 렉서가 자동으로 세미콜론을 붙여준다.
      • 컴파일러의 구문 분석 : 토크나이저 -> 렉서 -> 파서, 결과로 추상 구문 트리(AST)가 나온다.
    • golint : 코드 스타일 가이드 라인 (변수 이름, 오류 메세지 포매팅, 공개 메서드/타입 주석 배치)
    • vet : 잘못된 수의 파라미터 전달 / 사용되지 않는 변수에 값 할당
    • golangci-lint : golint, go vet +a 코드 품질 도구 세트 통합
  • 현재 프로젝트에서 사용중인 ktlint와 golint 비교

'Language > GoLang' 카테고리의 다른 글

[GopherCon 2021] Go Scheduler  (0) 2024.05.06
[learning go] 2. 기본 데이터 타입과 선언  (0) 2024.04.07