import "fmt"

Creating Packages

package main

import "fmt"
import "golang-book/chapter11/math"

func main() {
	xs := []float64{1,2,3,4} 
	avg := math.Average(xs) 
	fmt.Println(avg)
}
package math

func Average(xs []float64) float64 { 
	total := float64(0)
	for _, x := range xs {
		total += x 
	}
	return total / float64(len(xs))
}
  1. math는 패키지의 이름이인데 고의 표준 배포의 부분이다. 하지만 고 패키지가 계층적일 수 있기에 우리는 당신의 패키지가 이름이 같아도 안전하게 사용할 수 있다. (진짜 math 패키지는 math다. 우리가 만든건 golang-book/chapter11/math다)
  2. 우리가 우리의 math 라이브러리를 임포트할 때는 우리는 full 이름을 사용한다. (import "golang-book/chapter11/math"), 하지만 math.go 안에서는 그냥 이렇게만 적으면 된다. package math
  3. 우리는 또한 단지 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
  1. 패키지 안에 있는 모든 함수들은 대문자로 시작한다는 사실을 알게 되었을 것이다. 고에서는 어떤 것이 대문자로 시작한다면 그것은 다른 패키지에서 볼 수 있다는 것을 의미한다. 만약에 Average라는 함수 대신 average를 main 프로그램에 만든다면 이걸 볼 수 없을 것이다. 다른 패키지에서 사용하길 원하는 우리의 패키지의 부분만 노출하는 것은 좋은 연습이다. 그리고 다른 것은 숨기자. 이것은 우리에게 우리 프로그램의 다른 부분을 부수지 않고 나중에 자유롭게 변화시킬 수 있도록 허락한다. 그리고 패키징도 쉽게만든다.