brew / Go 홈페이지에서 go를 다운받는 방법 2가지가 있습니다.
brew update
를 통해 업데이트를 체크하고 brew install 명령어로 golang
을 설치합니다.
$ brew update
$ brew install go
설치가 완료되면 go 버전을 확인해 정상적으로 설치되었는지 확인합니다.
$ go version
(현재 버전 1.21.6)
https://www.notion.so/Go-bfea5e97b64249c4aff3b0b1fc16b2aa?pvs=4#a58f585ddc7c4a64820b529761076b00
설치가 완료되면 go 버전을 확인해 정상적으로 설치되었는지 확인합니다.
$ go version
2.1 또는 go env
를 입력 후 아래와 같은 결과 값이 나온다면 정상적으로 Go가 설치된 것입니다.
$ go env
만약, go version
명령어를 입력했을 때 zsh: command not found: go
에러가 발생한다면, 환경변수 설정 문제로 인해 발생한 것입니다.
직접 PATH에서 go 커맨드가 위치한 경로를 추가해야합니다.
// zshrc 파일 생성
$ touch ~/.zshrc
// zshrc 파일 열기
$ vim ~/.zshrc
// 환경변수 추가
export GOROOT="/usr/local/go"
export GOPATH=$GOROOT/gopath
export GOBIN=$GOPATH/bin
export PATH=${PATH}:$GOROOT/bin
export PATH=${PATH}:$GOBIN
// 변경사항 적용
$ source ~/.zshrc
// echo를 통해 환경변수가 제대로 등록되었는지 출력
$ echo $GOROOT
/usr/local/go
$ echo $GOPATH
/usr/local/go/gopath
$ echo $GOBIN
/usr/local/go/gopath/bin
💡 Workspace란,
여러개의 go module들을 일일이 go.mod 파일로 수정할 필요 없이 관리할 수 있게 해주기 때문에, workspace 내 모듈들은 각자가 root moudle로 취급된다.
Go 코드는 단일 workspace에서 관리되며, workspace에는 여러개의 프로젝트가 하위에 들어갈 수 있다.
Go 설치 이후에는, mac을 기준으로 `/Users/${USER}/go` 라는 폴더가 생성된다.
- `/Users/${USER}/go/bin` << 실행 파일들이 모여 있음
- `/Users/${USER}/go/pkg` << 패키지 파일들이 모여 있음
단일 workspace인
/USER/${USER}/go
디렉토리에서 모든 프로젝트의 모음 폴더인src
를 생성해준 뒤 하위에 각 프로젝트들을 구성하는 방식.
workspace로 이동
$ cd /Users/${USER}/go
만약, 위의 디렉토리로 이동할 수 없을 경우(go 폴더가 생기지 않은 경우) 다음과 같이 해결할 수 있습니다.
설치가 제대로 되어있는지 확인
// 경로 확인
$ which go
// 설치 확인
$ go
// 환경설정이 되어있는지 확인
$ go env
go 폴더가 여전히 존재하지 않을 경우 사용자의 홈 디렉토리로 이동하여 go 폴더를 직접 생성한 뒤 내부 폴더들을 생성한다.
$ cd
// go 폴더 생성
$ mkdir go
// go 폴더에 3개의 폴더 생성하는 명령어
$ mkdir -p $HOME/go/{bin,src,pkg}
go 소스파일 집합인 src
생성 및 src
디렉토리로 이동
// src 생성
$ mkdir src
// src로 이동
$ cd src
src
디렉토리에서 프로젝트 클론
단, 폴더 이름에 하이픈(’-’)을 포함하면 일부 언어나 프레임워크에서 호환성의 문제가 발생할 수 있기 때문에 변경해주는 것이 좋습니다.
```bash
$ git clone 주소 폴더명
```
해당 프로젝트 레포지토리로 이동 후, 패키지에 대한 모듈 생성을 해줍니다.
$ go mod init 이름-go
모듈의 모든 패키지에 대한 종속성 제거 및 업데이트가 필요합니다.
소스 코드를 확인해 import되지 않는 모듈들을 자동으로 go.mod 파일에서 삭제하고 import되었지만, 실제 모듈이 다운안된 경우 go.mod 파일에 추가합니다.
```bash
$ go mod tidy
```
Extension 설치
go 코드를 디버깅하기 위해서 GO extension
을 설치해야합니다.
6.1 Go 플러그인⌘ + ⇧ + p
을 전체 선택해서 업데이트합니다.
launch.json
설정
개발 시, 디버깅 모드에 요구되는
launch.json
기본 launch 모드와, test 모드 중 선택하여 디버깅할 수 있다.
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/main.go",
"args": [
"observe",
"--not",
"--from-label",
"reserved:world",
"--since",
"1m",
"--last",
"1000"
]
},
{
"name": "Test Current File",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${file}",
"env": {},
"args": []
}
]
}
test 모드 이용 예시
// string_util.go
package util
import "strings"
func CreateNamesMap(names []string) map[string]string{
nameMap := make(map[string]string)
for -, name := range names {
namesMap[name] = "--from-namespace"
}
return nameMap
}
// string_util_test.go
package util_test
import (
"skuber-go/utils"
**"testing"** // testing import
)
func TestCreateNamesMap(**t *testing.T**){ // 파라미터에 testing mode 적용
names := **[]string{"d", "e", "f"}** // custom value를 넣어 단위 테스트
s := utils.CreateNamesMap(name)
if len(s) > 0 {
t.Error("wrong result")
}
}