Mac에서 Go 설치하기

Olivia·2024년 1월 18일
1

[Go]

목록 보기
1/4
post-thumbnail

Go 설치 가이드

GO 설치 가이드


1. 설치 파일 다운로드 및 실행

brew / Go 홈페이지에서 go를 다운받는 방법 2가지가 있습니다.

Brew를 통한 go 설치

  1. brew update를 통해 업데이트를 체크하고 brew install 명령어로 golang을 설치합니다.

    $ brew update
    $ brew install go
  2. 설치가 완료되면 go 버전을 확인해 정상적으로 설치되었는지 확인합니다.

    $ go version

Go 홈페이지를 통한 go 설치

  1. Go 다운로드 페이지로 접속하여 설치 파일을 다운로드 합니다.
    특정 버전이나 개인의 OS환경에 맞춰 해당 대상을 찾아 다운로드 합니다. (현재 버전 1.21.6)

https://www.notion.so/Go-bfea5e97b64249c4aff3b0b1fc16b2aa?pvs=4#a58f585ddc7c4a64820b529761076b00

  1. 설치가 완료되면 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

2.workspace

💡 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를 생성해준 뒤 하위에 각 프로젝트들을 구성하는 방식.

  1. workspace로 이동

    $ cd /Users/${USER}/go

    에러 발생시

    만약, 위의 디렉토리로 이동할 수 없을 경우(go 폴더가 생기지 않은 경우) 다음과 같이 해결할 수 있습니다.

    1. 설치가 제대로 되어있는지 확인

      // 경로 확인
      $ which go
      
      // 설치 확인
      $ go
      
      // 환경설정이 되어있는지 확인
      $ go env
    2. go 폴더가 여전히 존재하지 않을 경우 사용자의 홈 디렉토리로 이동하여 go 폴더를 직접 생성한 뒤 내부 폴더들을 생성한다.

      $ cd
      
      // go 폴더 생성
      $ mkdir go
      
      // go 폴더에 3개의 폴더 생성하는 명령어
      $ mkdir -p $HOME/go/{bin,src,pkg}
  2. go 소스파일 집합인 src 생성 및 src 디렉토리로 이동

    // src 생성
    $ mkdir src
    
    // src로 이동
    $ cd src
  3. src 디렉토리에서 프로젝트 클론
    단, 폴더 이름에 하이픈(’-’)을 포함하면 일부 언어나 프레임워크에서 호환성의 문제가 발생할 수 있기 때문에 변경해주는 것이 좋습니다.

    ```bash
    $ git clone 주소 폴더명
    ```
  4. 해당 프로젝트 레포지토리로 이동 후, 패키지에 대한 모듈 생성을 해줍니다.

    $ go mod init 이름-go
  5. 모듈의 모든 패키지에 대한 종속성 제거 및 업데이트가 필요합니다.
    소스 코드를 확인해 import되지 않는 모듈들을 자동으로 go.mod 파일에서 삭제하고 import되었지만, 실제 모듈이 다운안된 경우 go.mod 파일에 추가합니다.

    ```bash
    $ go mod tidy
    ```
  6. Extension 설치

    go 코드를 디버깅하기 위해서 GO extension을 설치해야합니다.

    6.1 Go 플러그인⌘ + ⇧ + p을 전체 선택해서 업데이트합니다.


  7. 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 >> string_util_test.go 복제
    • 해당 API의 parameter에 들어올 값을 커스텀해서 단위 테스트를 진행합니다.
      // 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")
      	}
      }

references
https://dksshddl.tistory.com/entry/Go-Go-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0%EC%BD%94%EB%93%9C-%EA%B5%AC%EC%A1%B0-package

profile
👩🏻‍💻

0개의 댓글