위의 사이트들을 참조하여 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

 

A Tour of Go

 

tour.golang.org

http://golang.site/

 

예제로 배우는 Go 프로그래밍

쉽고 재미있는 Go 프로그래밍 예제로 배우는 Go 프로그래밍 I like a lot of the design decisions they made in the [Go] language. Basically, I like all of them. - Martin Odersky, Creator of Scala

golang.site

 

+ Recent posts