Golang package

Falcon·2021년 3월 5일
1

go

목록 보기
7/11
post-thumbnail

시작하기 전에 이곳 이 go project layout 의 권장사항임을 밝힌다.

go package 구성

go는 대부분 하나의 워크스페이스에서 모든 것을 처리한다.

다른 언어처럼 프로젝트 이름의 워크스페이스별로 버전관리를 하는 형태와 다르다.

⚠️ go 1.14 Go Module 부터 아래와 같은 GOPATH 를 사용할 필요가 없어졌다.

Workspace

워크스페이스는 다음 3가지로 구성된다.
다음 패키지 구성은 이제, go module 이 들어오고부터 모든 GOPATH 에 설정할 필요가 없어졌다. 그래도 상식으로 알고는 있자.

/src

.go 코드를 갖는 모든 파일들
여러 라이브러리 파일도 여기 저장된다.

/pkg

.a 확장자를 갖는 패키지 객체들이 저장된다.

/bin

실행 파일들을 모아두는 곳


GOROOT

Go SDK의 위치를 담은 환경변수. 한 번 설정하고나면 바꿀 일이 없다.

GOPATH

Workspace 경로를 가리키는 환경변수로 반드시 등록해야한다.
+편의상 실행파일이 등록되는 bin 디렉토리 까지도 환경변수에 추가해두는 것이 관례이다.

보통 HOME directory 나 바로 HOME 밑에 둔다.

OSMac or LinuxWindows
Location Pathhome/go%USERPROFILE%/go

ex)

mkdir ~/users/falcon/gowork
export GOPATH=~/users/falcon/gowork
export PATH=$PATH:$GOPATH

gowork를 GOPATH 워크스페이스 디렉토리로 설정했다.
gowork 하위에 src, pkg, bin 디렉토리를 생성해야 한다. (자동으로 생성해주는 툴을 사용해도 좋다.)

다음은 실행파일이 담기는 bin 의 위치를 환경변수에 등록하는 명령이다.

export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN


git & package path

라이브러리 파일 import , export 를 위해 국룰로 여겨지는 디렉토리 구성을 따르는 것이 좋다.

libutil이라는 라이브러리 이름을 갖는 패키지를 만든다면 다음과 같이 할 수 있다.

mkdir $GOPATH/src/github.com/falcon/libutil

여기서 libutil이 패키지 이름이 되고
해당 디렉토리 예하의 모든 .go 소스파일은 최상단에 package 이름을 libutil로 명시해야한다.

package libtuil

func Printall(s string) {
// (중략...)
}

이는 나중에 git에 등록된 remote package를 import하기 상당히 용이하게 한다.

$go get github.com/falcon/libutil

main

윈도우 기준 .exe 다른 OS 기준 실행파일은 모두 bin에 저장된다.

이 때 실행파일이 될 메인 파일은 다음과 같이 패키지 이름 main으로 지정해야한다.

package main

// 패키지명이 반드시 main 이어야함.
import (
	"fmt"
	"github.com/milkcoke/stringutil"
)

func main()  {
	libutil.Printall("Hello, Go!")
}

go build, go install

go build

.go 파일을 컴파일하여 해당 디렉토리 내에 실행파일을 생성한다.

go install

컴파일, 실행파일을 생성하는데 다음과 같이 main인지, 패키지 파일인지에 따라 결과가 달라진다.
main 이 아닌 파일일 경우 .a (목적 파일)을 생성하여 pkg 에 담는다.
main 인 경우 실행파일을 bin 에, .a 파일을 pkg에 담는다.

main에 연결된 패키지 파일을 이미 compile한 적이 있다면 다시 go install할 때 변경된 부분만 컴파일한다. (컴파일 속도 향상 !)


Reference

profile
I'm still hungry

0개의 댓글