- 고는 좋은 소프트웨어 엔지니어링 규칙을 따르도록 설계된 언어이다. 높은 퀄리티의 소프트웨어의 중요한 부분은 코드 재사용이다. 고는 패키지를 통해서 재사용을 유도한다.
import "fmt"
- 위의 줄이 거의 모든 코드에 있다. fmt는 포매팅과 스크린에 출력하는 것과 관련된 패키지의 이름이다.
- 코드를 번들링하는 것은 3가지 목적이 있다.
- 이름을 덮어쓸 가능성을 줄인다. 그렇게 되면 함수의 이름이 줄어들고 간단명료해진다.
- 코드를 조직화하기 때문에 재사용을 원하는 코드를 찾기에 용이하다.
- 작은 프로그램의 조각을 리컴파일만 해도되도록함으로서 컴파일러가 처리 속도를 빠르게 한다. 비록 우리가 fmt 패키지를 사용하지만 우리는 우리 프로그램을 바꿀 때마다 이걸 리컴파일을 할 필요가 없다.
Creating Packages
- 패키지는 유일하게 프로그램이 사용하는 문맥을 돌아가게한다. 각각의 프로그램 없이는 우리는 우리가 만든 패키지를 사용할 방법이 없다. 우리가 작성할 패키지를 이용하는 앱을 만들어보자.
- ~/Go/src/golang- book에서 chapter11을 부를거야. 폴더 안에는 main.go라는 파일을 만들거야. 그리고 그 안에는 아래의 코드가 있지.
package main
import "fmt"
import "golang-book/chapter11/math"
func main() {
xs := []float64{1,2,3,4}
avg := math.Average(xs)
fmt.Println(avg)
}
- 그리고 chapter11이라는 폴더안에 math 라는 폴더를 만든다. 그리고 그 안에 math.go라는 파일을 만든다.
package math
func Average(xs []float64) float64 {
total := float64(0)
for _, x := range xs {
total += x
}
return total / float64(len(xs))
}
- 터미널에서 math 폴더를 사용하기 위해 당신은 그냥 go install을 하면 된다. 이건 math.go를 컴파일한다. 그리고 파일을 만든다. ~/Go/pkg/os_arch/golang-book/chapter11/math.a. (os가 윈도우고, amd64를 사용하기에 arch이다)
- 이제 chapter 11 폴더로 넘어가서 go run main.go를 해보자.
- math는 패키지의 이름이인데 고의 표준 배포의 부분이다. 하지만 고 패키지가 계층적일 수 있기에 우리는 당신의 패키지가 이름이 같아도 안전하게 사용할 수 있다. (진짜 math 패키지는 math다. 우리가 만든건 golang-book/chapter11/math다)
- 우리가 우리의 math 라이브러리를 임포트할 때는 우리는 full 이름을 사용한다. (import "golang-book/chapter11/math"), 하지만 math.go 안에서는 그냥 이렇게만 적으면 된다. package math
- 우리는 또한 단지 math만을 사용해서도 우리의 라이브러리에서 함수를 참조할 수 있다. 만약에 우리가 하나의 프로그램에서 두 라이브러리를 모두 사용하고 싶은 경우가 있다면 고는 별칭을 붙일 수 있게 해준다.
import m "golang-book/chapter11/math"
func main() {
xs := []float64{1,2,3,4}
avg := m.Average(xs)
fmt.Println(avg)
}
//m is alias
- 패키지 안에 있는 모든 함수들은 대문자로 시작한다는 사실을 알게 되었을 것이다. 고에서는 어떤 것이 대문자로 시작한다면 그것은 다른 패키지에서 볼 수 있다는 것을 의미한다. 만약에 Average라는 함수 대신 average를 main 프로그램에 만든다면 이걸 볼 수 없을 것이다.
다른 패키지에서 사용하길 원하는 우리의 패키지의 부분만 노출하는 것은 좋은 연습이다. 그리고 다른 것은 숨기자. 이것은 우리에게 우리 프로그램의 다른 부분을 부수지 않고 나중에 자유롭게 변화시킬 수 있도록 허락한다. 그리고 패키징도 쉽게만든다.