⚠️ 첫 설치 내용은intel
로 시작합니다. 에러를 만난 뒤 재설치하는 과정은 M1, M2, M3
를 위한 설치 과정을 정리해뒀습니다.
brew / Go 홈페이지에서 go를 다운받는 방법 2가지가 있다.
brew update
를 통해 업데이트를 체크하고 brew install 명령어로 golang
을 설치한다.
$ brew update
$ brew install go
설치가 완료되면 go 버전을 확인해 정상적으로 설치되었는지 확인한다.
$ go version
현재 intel를 사용하기 때문에 amd64
가 뜨는 것이다.
(현재 버전 1.21.6)
설치가 완료되면 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
Intel에서 M3로 마이그레이션 후 go를 실행하는데, 계속 go.mod에서 comile 에러가 발생함.
ERROR: packages.Load error: err: exit status 2: stderr: go: no such tool "compile"go list
amd64
인지 arm64
인지 확인.$ go version
apple칩일 경우 반드시 arm64가 나와야한다.
그러나 나는 amd64로 나온것으로 봐 intel에서 설치했던 go라 생각했기 때문에 go를 삭제하고 재설치해야겠다고 생각했다.
homebrew
확인brew역시 intel에서 설치했던것이라 생각해 brew 설치 경로를 확인했다.
homebrew
를 확인하지않고 무작정 go를 삭제 및 설치하니 계속 cmd64
로 설치되었기 때문.
which brew
/usr/local/bin/brew
/opt/homebrew/bin/brew
나의 경우 brew 역시 intel로 설치되어있음을 확인했다.
🚨 재설치전에 반듯이!!!!!!! DB는 백업을 시켜놓자...!!! 🚨
postgresql을 사용하는데 자꾸 local이랑 연결이 안되어서 뭐가 문젠가 하고 봤는데...
Homebrew를 재설치하면서 postgresql도 날아가있었다...🥲
다시 postgres 다운받았으나 데이터는 하나도 남아있지 않았던 상태...!
다행히도 운영중이던 서버에서 백업시켜논게 있어서 그걸로 복구 시켰다..!
1. homebrew 삭제
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
2. homebrew 재설치
apple silicon (m1-m3) 기준
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
3. homebrew 환경 변수 설정
nano ~/.zshrc
또는
vim ~/.zshrc
아래의 내용을 추가하거나 변경시킨다.
export PATH="/opt/homebrew/bin:$PATH"
4. homebrew 환경 변수 변경사항 적용
source ~/.zshrc
5. homebrew 설치 확인
brew --version
정상적으로 설치되었을 경우, Homebrew 버전
로 출력된다.
1. Go 설치 경로 확인
which go
2. Go 삭제
sudo rm -rf go-설치-경로
ex) sudo rm -rf /usr/local/go
3. 환경 변수 정리
nano ~/.zshrc
또는
vim ~/.zshrc
Go와 관련된 환경변수를 제거해야한다.
예를들어 export GOROOT 또는 export PATH와 관련된 Go 경로를
모두 제거한 후 파일을 저장하고 닫았다.
4. 환경 변수 파일 업데이트
source ~/.zshrc
5. Go 설치
위에 작성한 내용을 다시 확인하여 재설치하면 된다.
이번에 나는 homebrew
로 설치했다.
brew install go
go version
M1 - M3의 경우 go version go1.xx.xx darwin/arm64
로 나와야 한다.
6. 환경 변수 설정
export GOROOT="/opt/homebrew/opt/go@1.22/libexec"
export PATH="/opt/homebrew/opt/go@1.22/bin:$PATH"
export PATH=$PATH:$HOME/go/bin
진짜 오랜만의 Go라서 세상 멍청한 짓을 많이했다. git clone으로 go 프로젝트를 클론받고난 뒤, 그냥 /desktop/goProject
폴더에 클론받은 것...🙄🤦♀️
Go 언어는 GOPATH
라는 경로를 통해 소스 코드와 패키지를 찾는다.
따라서 처음 Go를 설치할 때, 기본적으로 ~/go
폴더를 GOPATH로 사용한다.
그렇기 때문에 Go 폴더에 프로젝트를 넣어야한다...
그렇다면 도대체 이 Go 폴더를 어떻게 찾아야할까..?
🙃 진짜 계속 혼란의 연속이였다. 똥멍청이짜식...💩
내가 쓴 글 읽어보니 아래 workspace에다가 정리를 해 놨었다.. ㅎㅎㅎㅎ 내 글 내가 안읽어서 생긴 문제..🙃
Go 폴더 찾기
기본적으로 go는 /Users/사용자이름 안에 go 폴더가 있다.
사용자 이름이 뭔지 아는 분들은 해당 파일에 들어가 go 폴더를 찾으면 되고, 모르는 분들은 아래의 명령어로 해당 폴더를 열어보면 된다.
사용자 이름 찾기:
whoami
go 폴더 한 번에 열어버리기:
$ open /Users/$(whoami)/go
그렇다면 go 폴더가 짜잔하고 자동으로 열릴 것이다..!!!
해당 폴더 아래 src
폴더를 만든 후 그 안에 프로젝트를 옮기면 된다.
/Users/Olivia/go/src/goProject
마지막으로 go 모듈 파일(go.mod
)을 정리한다.
go mod tidy
이로써 packages.Load error: err: exit status 2: stderr: go: no such tool "compile"go list 에러 해결..!!!
💡 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")
}
}