일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- go multifile manage
- Go
- TEE
- carla
- 리눅스 멀티미디어
- grep
- 코로나바이러스
- linux
- 사회적거리두기
- 명령어
- 자율주행
- go make new project
- tldr
- MAN
- CODE128
- barcode
- sudo
- 예제
- 자택근무
- awk
- go new project
- WebCam
- ssh-copy-id
- 리눅스
- ssh-keygen
- html5
- 유닉스
- linux go new project
- UNIX
- 파이프 와이어
- Today
- Total
힘내라 일처리
Go 언어 프로젝트 생성하는 법 알아보기 (리눅스) 본문
개요
이번에 친구와 함께 간단한 프로젝트를 해보기로 했고 저는 해당하는 서버 언어로 Go 언어를 선택했습니다.
이전에 잠깐 찔러보기만 해 보고 뭔가 구성을 해본 적이 없어서 어떻게 해야 하나 당황을 했는데요...
일단 설치가 되어있는 상태로 가정하고 내용을 진행 해 보겠습니다.
프로젝트 폴더 만들기
아마 이전에 다른 언어의 개발 경험이 있었다면 대체로 아래와 같은 구조의 프로젝트 폴더 구조를 생각할 거 같습니다.
저도 그렇구요.
프로그램의 덩치는 커져만 가는데, 파일 안에 코드는 길어져만 가니 파일을 분리하고 이것들을 폴더로 묶어야 하는 것이지요.
myproject/
├── lib
│ ├── a.c
│ ├── a.h
│ ├── b.c
│ └── b.h
└── main.c
그런데 Go에서는 전반적으로 동일하지만 조금 어색한 원칙이 하나 있습니다.
GOPATH
에 프로젝트를 만들어야 하는 것이지요
$ go env GOPATH
> /home/orange/go
go env
명령어를 통해서 경로를 확인할 수 있습니다.
새로 만든 프로젝트는 $GOPATH/src/<깃주소>/<깃계정>/<깃레포>
의 경로에 만들어야 합니다. 안 그러면 위처럼 폴더로 묶는 구조를 만들 수가 없더라고요.
이건 좀 불편하지 않나... 싶기는 한데 이런 엄격한 구조가 golang의 장점이지 않나... 싶습니다.
$GOPATH/src/closed.src/orange/myproject
├── go.mod
├── main.go
└── mylib
├── a.go
└── b.go
그래서 Go언어 프로젝트는 이러한 구조로 비슷하게 구현이 가능합니다.
~/go/src/closed.src/orange/myproject$ go mod init
폴더를 생성한 뒤에는 go mod init
을 해주어야 합니다.
module closed.src/orange/myproject
go 1.18
go.mod파일의 내용은 위와 같습니다. 모듈의 경로가 정의되어 있지요.
go 소스 추가하기
main.go
package main
import (
"fmt"
"closed.src/orange/myproject/mylib"
)
func main() {
fmt.Println("main func")
mylib.Afunc()
mylib.Bfunc()
}
mylib/a.go
package mylib
import "fmt"
func Afunc() {
fmt.Println("a func")
}
mylib/b.go
package mylib
import "fmt"
func Bfunc() {
fmt.Println("b func")
}
여기에 나오는 mylib/*.go
들은 main.go
에서 함께 넣지 않고 분리해서 구현하고자 하는 코드들을 이 안에 구현하면 됩니다.
그렇게 되면 여기에 나오는 mylib
은 일종의 패키지가 되는 것이고 main.go
에서 그것을 로드해서 사용하게 됩니다.main.go
코드를 다시 한번 보시면, closed.src/orange/myproject/mylib
프로젝트 경로가 통째로 포함이 되어 있는 것을 확인할 수 있습니다.
저는 이렇게 경로가 코드에 포함되어있는 게 낯설어서 이게 맞나... 싶었는데요.
제가 좋아하는 go언어 오픈소스인 lazygit도 동일한 방식으로 하위 패키지가 포함된 것을 볼 수 있습니다.
아마 이러한 방식의 파일 관리 기법은 코드의 모듈화와 재사용성을 늘리기 위함이 아닐까 싶습니다.
패키지의 경로가 모두 나와 있어 다른 프로젝트의 부분 패키지를 사용할 수 있을 테니까요.
낯설지만 꽤 좋은 구조구나 싶습니다.
여기까지 go언어 프로젝트를 생성하는 방법을 알아보았습니다.
'알아보기' 카테고리의 다른 글
의미가 쉽사리 짐작 가지 않는 unix / linux 명령어들의 의미 알아보기 (0) | 2022.07.22 |
---|---|
.rc 에서 rc의 의미 알아보기 ( .bashrc / init.rc / ... ) (0) | 2022.07.22 |
C++ Pimpl 알아보기 (0) | 2022.07.01 |
eMMC vs UFS 둘중 어느게 좋은지 알아보기 (0) | 2022.07.01 |
Tio Tmux, Byobu랑 사용하기 좋은 시리얼 모니터 프로그램 사용법 알아보기 (0) | 2022.06.30 |