티스토리 뷰
패키지
코드를 구조화하고 재사용하기 위한 단위
- Go 프로그램은 패키지로 구성됨
- Go의 코드는 패키지 선언으로 코드를 시작
- 다른 패키지 import 가능
- 패키지 이름과 디렉토리는 동일
- 같은 패키지를 가지는 소스 파일은 모두 동일한 디렉토리에 위치
- 라이브러리, 모듈과 비슷한 의미를 가짐
💡 패키지 이름 convention
- 소문자로 구성
- 소스 파일 하나로 구성된 패키지는 패키지 이름과 소스 파일 이름을 통일
위의 사이트에 들어가면 go의 기본 패키지를 알 수 있다.
import "fmt"
import "strings"
import (
"fmt"
"strings"
)
go에서는 위의 두 방식으로 패키지를 import할 수 있다.
여러가지 패키지를 import 할 때는 (소괄호)를 사용하여 import하는 것이 편리하다.
(패키지 이름).(가져올 대상)과 같은 방식으로 패키지에서 필요한 것들을 가져와서 사용할 수 있다.
go 패키지의 종류
- 실행 프로그램: 패키지 이름이 main인 경우
- 라이브러리
실행파일
main 패키지를 필행하면, 디렉토리 이름과 같은 이름의 실행파일이 생성된다.
pkg 디렉토리에서 go build로 main 파일을 빌드하면, pkg라는 이름을 가진 실행파일이 생성된 것을 확인할 수 있다.
라이브러리
main 패키지 외의 패키지들은 모두 라이브러리로 생성된다.
src 디렉토리 아래에 lib.go 파일을 생성하였다.
package lib
func IsDigit(c int32) bool {
return '0' <= c && c <= '9';
}
lib.go의 내용이다. 이 파일은 문자가 숫자인지 판단하는 함수 IsDigit이 있다.
import (
"awesomeProject/src/lib"
"fmt"
)
func main() {
fmt.Println(lib.IsDigit('6'))
}
라이브러리를 import하고 IsDigit 함수를 불러보았다.
실행결과이다.
접근제어
식별자가 대문자로 시작하면 외부에서 접근할 수 있다.
식별자가 소문자로 시작하면 외부에서 접근이 불가능하지만, 패키지 내부에서는 접근할 수 있다.
func main() {
fmt.Println(lib.IsDigit('6'))
fmt.Println(lib.isDigit('6'))
}
func IsDigit(c int32) bool {
return '0' <= c && c <= '9';
}
func isDigit(c int32) bool {
return '0' <= c && c <= '9';
}
IsDigit은 대문자로 시작하고 외부에서 접근 가능하다. 하지만, isDigit은 접근이 불가능하고 main을 실행하면 에러가 발생한다.
alias
패키지 이름에는 별칭(alias)를 붙일 수 있다. 패키지 이름이 길거나 혹은 이름이 중복되는 경우 별칭을 유용하게 사용할 수 있다.
import (
mylib "awesomeProject/src/lib"
"fmt"
)
lib 패키지에 mylib이라는 별칭을 붙여주었다.
언더바(_) 식별자
Go에서는 import 한 패키지를 사용하지 않으면 컴파일 에러가 발생한다. 이 때, 언더바(_)를 식별자로 사용하면 에러가 발생하지 않는다.
init() 함수
init 함수는 패키지가 로드될 때 가장 먼저 호출된다. 패키지를 호출할 때 사용할 수 있다.
var v rune
func init() {
v = '1'
}
func main() {
fmt.Println(lib.IsDigit(v))
}
main은 init 함수가 실행된 다음 실행된다.
- Total
- Today
- Yesterday
- squash merge
- Python
- postman tests
- 1차 인터뷰
- string
- postman collection
- DGS Framework
- solidity
- git
- python3
- graphql
- Squash and merge
- pm.test
- Basic Type
- Kotlin
- downTo
- 확장 함수
- postman
- go 특징
- 네이버 2022 공채
- 코딩테스트
- 주생성자
- 2차 인터뷰
- java
- mysql
- hashcode
- 코틀린
- pm.expect
- github
- Kotlin In Action
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |