개인공부/language

[GO] 모듈과 패키지

파뱁 2024. 11. 5. 18:52
728x90

https://go.dev/learn/ 

 

Get Started - The Go Programming Language

Getting started In this tutorial, you'll get a brief introduction to Go programming. Along the way, you will install Go, write some simple "Hello, world" code, use the go command to run your code, use the Go package discovery tool, and call functions of an

go.dev

위의 페이지는 고랭 공식에서 지원하는 학습 문서. 저 바보 같이 생긴 수달이지만 설명 매우 굿 👍

 

고랭이라는 것 자체가 공식이 모든걸 먹여주는 언어라고 들어서 그냥 공식문서 부터 읽기로 했다.

 

고랭 설치 하고 파일을 만들어 실행 까지는 한번 해봤고

그 다음 챕터가 create modules 길래 

모듈이 뭐지? 하고 검색해 봤다.

 

구글에 모듈 치니까 패키지와의 비교로 제목이 많이 떠있는 것을 보고

아 자바 패키지와 비슷한 역할인가? 하고 확인했다.

 

우선 모듈과 패키지의 관계성은 

 

 

패키지의 모음 == 모듈

이라고 이해 하면 된다.

 

따라서 하나의 모듈엔 다수의 패키지가 들어갈 수 있다.

 

본격적으로 모듈과 패키지가 뭔지 알아보겠다.

 

1.  모듈이란 무엇인가

모듈 : 종속성 관리를 위해 고랭에서 지원하는 것으로 패키지의 모음이며, 모듈 파일이 있는 곳이 패키지의 루트경로

 

모듈을 초기화 하면서 root 패키지의 경로 및 모듈 이름을 지정할 수 있다.

 

모듈 파일에는 모듈 이름과 고랭 버전이 표기되며, 포함된 외부 패키지도 함께 표시한다.

 

모듈 파일의 확장자는 .mod 이며, 외부 패키지를 포함해 빌드 하면 .sum 파일이 생성된다.

.sum 파일은 외부 패키지 버전에 대한 checksum 을 모아둔 파일이다.

 

> 모듈 초기화 예시 코드

go mod init rootpath/module_name

위의 코드를 실행시키면 'rootpath/module_name' 가 루트 패키지의 경로가 되며, 실행파일의 이름은 module_name이 된다.

참고로 [go mod init module] 이렇게 작성하면 'module'이 루트 패키지의 경로고, 실행파일의 이름은 module이다.

 

2. 패키지란 무엇인가

패키지 : 고랭의 코드를 묶는 단위로, 모든 코드는 패키지에 속해야만 함

 

자바의 main 함수 처럼 고랭의 main 패키지는 기타 패키지와는 다르게 그 만의 의미를 가지고 있는데,

그것은 '프로스램의 시작 패키지' 라는 것이다.

 

모든 고랭 프로그램은 main 패키지의 main() 함수부터 실행이 된다.

 

참고로 main 패키지 외에는 main() 이라는 함수 이름을 가질 수 없다.

 

외부 패키지를 사용하고 싶다면 파이썬의 라이브러리 처럼 import 명령어를 상단에 입력하면 된다.

패키지명이 길거나 겹친다면 alias (별칭) 을 지정해 사용할 수 있다.

 

> 패키지 import 예시 코드

package test

import ("other-package"
	sn "simple-name"
)

func TestFunc() {
	other-package.One()
	sn.Two()
}

위의 쓴 패키지 이름 처럼 언더바(_)가 아니고 하이픈(-)이 모듈 이름에 들어가면 하이픈은 제외하고 호출 해도 지장이 없지만,

언더바가 들어간 패키지 이름은 언더바를 온전히 다 입력해야 한다.

 

같은 패키지 내의 모든 소스 코드는 패키지 안의 자원을 공유한다.

 

두 개의 .go 파일(one.go, two.go) 이 하나의 패키지 안에 있다고 가정을 해보자

two.go 에 있는 함수에서는 one.go에 있는 모든 함수를 호출 할수 있다.

 

그러나 서로 다른 패키지에 있는 파일이라면

"함수 이름이 대문자로 시작하는" 함수만 호출 할 수 있다.

 

main() 함수 만큼이나 중요한 함수가 init() 함수인데,

해당 함수는 패키지가 import 될때 호출 없이 가장 먼저 실행되는 함수다.

 

패키지 내에서 중복선언은 가능하지만, 사용자 임의 호출은 불가능하다.

 

참고로 프로그램을 실행하면 main함수 보다도 먼저 init 함수가 호출된다.

 

> init() 함수 실행 순서

1. 가장 안쪽 패키지 부터
2. 파일 정렬 위에서 아래로
3. 함수 정렬 위에서 아래로
728x90
반응형

'개인공부 > language' 카테고리의 다른 글

[JAVA] ArrayList가 비어있는지 확인 하기  (0) 2024.02.27
[C언어] 포인터 개념  (0) 2022.05.30