위의 사이트들을 참조하여 go의 간단한 사용법을 배워봅니다.
Package
모든 Go 프로그램은 package로 구성됩니다. package를 통해서 모듈화 및 코드의 재사용 기능을 제공합니다.
Go의 많은 Package들이 표준 라이브러리로 제공합니다.
이러한 표준 라이브러리는 환경변수 GOROOT/pkg 경로 설치되어 있습니다.
표준 패키지에 대해서 알고 싶으시다면 https://golang.org/pkg/ 를 통해서 확인 가능합니다.
Main Package
일반적으로 Packege는 라이브러리 형태로 사용되지만 "main" 이라고 명시된 package는 라이브러리가 아닌
실행 프로그램으로 만들게 됩니다. c++과 마찬가지로 package 안에 main() 함수가 Entry Point로 지정됩니다.
만약에 라이브러리를 만들 때는 main 패키지를 명시하지 않아야 합니다.
// 실행 프로그램을 만듭니다.
package main
// 실행 프로그램의 시작점은 이곳입니다.
func main() {
var a int = 10
println(a);
}
Package Import
프로그램에서 Package를 사용하려면 import 키워드를 사용해서 패키지를 포함 시켜야 합니다.
package main
// "factored" import statment
import (
"fmt"
"math"
)
/*
import "fmt"
import "math"
와 동일합니다.
*/
func main() {
fmt.Printf("Now you have %g problems.\n", math.Sqrt(7))
}
예를 들어서 fmt Package와 math Package를 포함시키기 위해서는 예제와 같이 import를 통해서 추가 시켜 줍니다.
Package를 import 한 후에는 Package에 내장된 호출을 사용할 수 있습니다.
예제에서는 fmt의 Printf나 math의 Sqrt를 호출해서 사용하고 있습니다.
Package Export 규칙
go안에서는 이름이 대문자로 시작되면 외부에서 사용할 수 있습니다.
소문자로 시작되는 경우에는 외부에서 사용 할 수 없습니다.
// Math 패키지의 const.go 중 일부
const (
// 생략..
Pi = 3.14159265358979323846264338327950288419716939937510582097494459 // https://oeis.org/A000796
// 생략..
)
// Math 패키지의 abs.go 중 일부
func Abs(x float64) float64 {
return Float64frombits(Float64bits(x) &^ (1 << 63))
}
위의 예제 코드는 math 패키지중 일부인데 첫글자가 대문자로 선언되어 있기 때문에 import로 math를 포함하면
외부에서 사용 할 수 있습니다.
// Math 패키지의 bits.go 중 일부
// normalize returns a normal number y and exponent exp
func normalize(x float64) (y float64, exp int) {
const SmallestNormal = 2.2250738585072014e-308 // 2**-1022
if Abs(x) < SmallestNormal {
return x * (1 << 52), -52
}
return x, 0
}
위의 예제 코드는 math 패키지의 bits.go 중 일부입니다. normalize라는 함수가 있는데 import로 math를
포함 하더라도 외부에서는 호출 할 수 없습니다.
사용자 정의 Package 만들기
개발자는 사용자 정의 패키지를 만들어서 사용 할 수 있습니다.
사용자 정의 라이브러리는 일반적으로 폴더를 하나 만들고 그 폴더 안에 .go 파일들을 만들어서 구성합니다.
예제를 만들기 위해서 저같은 경우는 "src\testlib\mymath" 폴더를 만들었습니다.
package mymath
// Plus is left + right
func Plus(left int64, right int64) int64 {
return left + right
}
package mymath
// Multiple is left * right
func Multiple(left int64, right int64) int64 {
return left * right
}
plus.go와 multiple.go 파일을 만들었고 package명은 mymath로 설정하였습니다.
package main
// "factored" import statment
import (
"fmt"
"math"
// 새로 정의한 testlib/mymath 라이브러리를 추가해서 수행합니다.
"testlib/mymath"
)
func main() {
fmt.Printf("Now you have %g problems.\n", math.Round(math.Sqrt(7)))
fmt.Printf("mymath Plus(%d)\n", mymath.Plus(10, 10))
fmt.Printf("mymath Multiple(%d)\n", mymath.Multiple(10, 10))
}
이제 새로 정의한 package를 import해서 사용할 수 있습니다.
참고 사이트
https://tour.golang.org/basics/1
tour.golang.org
golang.site
'golang' 카테고리의 다른 글
[golang] goroutines (0) | 2020.04.05 |
---|---|
[golang] 구조체, 메서드, 인터페이스 (0) | 2020.04.03 |
[golang] 익명함수, 클로져, Array, Slice, Map (0) | 2020.04.01 |
[golang] 변수, 상수, 키워드, 함수, 반복문 (0) | 2020.03.30 |
[golang] Window golang 개발 환경 구축하기 (0) | 2020.03.29 |