연산자 := 는 var 키워드 및 type을 생략하고 변수를 선언할 때 사용한다. 이 연산자의 주목적은 함수 내의 local 변수의 초기화 및 선언하고 변수의 스코프를 좁히기 위한 것이다. 변수의 타입은 식의 타입(오른쪽에 무엇이 있는가)에 따라 정의된다. 정리하면 go에서는 변수를 생성하는 두 가지 방법이 있다.
변수이름 := 식 또는 값
var 키워드를 사용하면 선언과 초기화를 따로 할 수 있지만, :=를 사용하면 선언과 초기화를 동시에 해야한다.
예제
package main
import "fmt"
func main() {
i := 5
str := "Hello, World"
fmt.Println(i)
fmt.Println(str)
}
Short Declaration Operator를 사용하면 같은 타입 혹은 다른 타입의 변수를 한 번에 여러개 선언할 수 있다.
예제1 :
package main
import "fmt"
func main() {
a, b, c := "Hello", 5, 2.4
fmt.Printf("a : %s, type of a : %T\n", a, a)
fmt.Printf("b : %d, type of b : %T\n", b, b)
fmt.Printf("c : %f, type of c : %T\n", c, c)
}
결과 :
a : Hello, type of a : string
b : 5, type of b : int
c : 2.400000, type of c : float64
예제2 :
package main
import "fmt"
func main() {
a, b := 1, 2
a := 4 // error
c, b := 3, 4 // Not error
d, b := 5, "abc" // error
fmt.Printf("%d, %T\n", a, a)
fmt.Printf("%d, %T\n", b, b)
fmt.Printf("%d, %T\n", c, c)
fmt.Printf("%d, %T\n", d, d)
}
여러개의 리턴 값을 가지는 함수에도 := 연산자 사용이 가능하다.
package main
import "fmt"
func next(n int) (int, int) {
return n + 1, n + 2
}
func main() {
next1, next2 := next(1)
fmt.Println(next1, next2)
}
:= 연산자는 block-level scope 를 가지는 지역 변수만 선언 가능하다. 일반적으로 지역 변수는 함수 block 내에서 선언된다. 만약 전역 변수를 :=로 선언하려고 하면 에러가 날 것이다.
package main
import "fmt"
a := 3 // error
func main() {
b := 5 // Not error
}