Golang Syntax
https://go-tour-kr.appspot.com/
1. Hello GO!
package main import ( "fmt" "math" ) func main() { fmt.Println("Happy", math.Pi, "Day")// Happy 3.141592653589793 Day }
Go 프로그램은 모두 package(패키지)로 구성 되어 있다.
위 Go 코드는 main
패키지로 부터 가져오고 있다.
위 코드에선 fmt
와 math
를 import 하고 있다.
import( ..., ... )
와 같이 한번에 입력 할 수 도 있으며,
import fmt
import math
로 각각 표현할 수 있다.
패키지를 import 하면 패키지의 메소드, 변수, 상수등을 접근하기 위해선 export 해주어야 하는데,
Go에서는 첫 문자가 대분자로 시작하면, 외부에서 접근이 가능한 exported name이 된다.
즉, math.pi
는 외부에선 접근이 불가능하지만 math.Pi
는 외부에서 접근이 가능하단 뜻이다.
2. 함수
package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13))// 55 }
Go에서의 함수 선언은 func 함수명(매개변수) 반환형
으로 정의한다.
- 두개 이상의 매개변수를 받을 때 같은 타입일 경우 마지막 매개변수에만 타입을 명시하고 나머지는 생략 할 수 있다.
add(x int, y int)
>>add(x, y int)
- Go의 함수에선 여러개의 결과를 return 할 수 있다.
package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("hello", "world") fmt.Println(a, b)// world hello }
대신
반환형
에 각각 반환할 타입((string, string)
)을 적어줘야한다. - Go의 함수에선 반환할 변수들의 이름을 미리 정해 놓고 사용 후, 간단히 return할 수 있다.
package main import "fmt" func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } func main() { fmt.Println(split(17))//7 10 }
3. 변수
Go에선 변수를 선언하는 다양한 방법이 있다.
var x, y, z int
var 키워드를 통해 여러 변수를 간히 변수를 선언할 수 있다.
참고로 아무값도 넣지 않을 경우 각각의 기본 값 (int: 0, bool: false, string: “”)으로 초기화 된다.
+ 아무값도 넣지 않는 경우엔 자료형을 지정해주지 않는다면, 에러가 발생한다.var c, python, java = true, false, "no!"
또한 초기화시 따로 자료형을 명시하지 않는다면, 자료형을 알아서 정해준다.x, y, z := 1, 2, 3
:= 키워드를 사용하면 간단히 변수를 사용할 수 있으며, 알아서 자료형을 정해준다.
하지만 := 키워드는 함수 밖에선 사용할 수 없고, x int := 1 처럼 자료형을 지정해 줄 수 없다.
4. 상수
const Pi = 3.14
와 같이 const 키워드를 통해 문자, 문자열, 부울, 숫자 자료형을 상수로 선언 할 수 있다.
- 여러 상수를 선언할 땐
const ( ... )
로 상수 여러개를 한번에 지정해 줄 수 있다.
const (
Pi = 3.14
hello = "world"
) - 상수는 문맥의 따라 자동으로 타입을 지정해주게 된다.
또한 숫자의 경우 일반적인 변수 보다 정밀한 값을 표현 할 수 있다.package main import "fmt" const ( Big = 1 << 100 Small = Big >> 99 ) func needInt(x int) int { return x*10 + 1 } func needFloat(x float64) float64 { return x * 0.1 } func main() { fmt.Println(needInt(Small)) // 21 fmt.Println(needFloat(Small))// 0.2 fmt.Println(needFloat(Big)) // 1.2676506002282295e+29 }