[Go/Golang] Go 언어 변수 선언 특이한 점

2022. 6. 6. 20:0003. Resources/Go

728x90
반응형

hello world 다음인가 다다음에 나오는 변수 선언 방법을 보고 이런저런 테스트를 해봤다.

https://gobyexample.com/variables

 

Go by Example: Variables

In Go, variables are explicitly declared and used by the compiler to e.g. check type-correctness of function calls. package main import "fmt" func main() { var declares 1 or more variables. var a = "initial" fmt.Println(a) You can declare multiple variable

gobyexample.com

 

아래는 제공된 예시 코드이다.

package main

import "fmt"

func main() {

    var a = "initial" // declare one value
    fmt.Println(a)

    var b, c int = 1, 2 // declare multiple values at once
    fmt.Println(b, c)

    var d = true // declare variable without type
    fmt.Println(d)

    var e int // initialized with zero-valued; int: 0
    fmt.Println(e)

    f := "apple" // shorthand for declaring and initializing a variable
    // var f string = "apple"
    fmt.Println(f)
}

예제 페이지에 있는 내용을 축약해서 주석을 같이 달아봤다.

JS에서 변수선언하는 것과 비슷하게 var를 이용해서 선언을 한다.

하지만 = 표시 전에 type을 명시하면 strict한 type 선언이 되는 것이고, type을 명시하지 않으면 알아서 type을 잡아준다.

또, 변수를 선언할 때 초기값을 주지 않으면 각 type 별로 zero-value 라는 기본 값을 이용해 선언하게 된다.



제일 새로운 부분은 := 표시인데,  바다코끼리를 닮았다고 해서 walrus operator라고 하고, 변수를 보다 쉽게 선언하면서 동시에 값도 할당할 때 쓰는 표현식이다.

이 것도 한 번에 여러개 변수를 선언할 수 있나 테스트 해봤는데 가능하더라.

 

위의 예제 코드 기반으로 내가 이것저것 테스트 더 해본 코드는 아래와 같다.

진짜로 타입 선언이 제대로 되는지도 궁금해서 type을 체크하는 함수가 있는 reflect 패키지도 추가해서 type까지 확인해봤다.

package main

import (
	"fmt"
	"reflect"
)

func main() {

	var a = "initial"
	fmt.Println(a)

	var b, c int = 1, 2
	fmt.Println(b, c)

	var d = true
	fmt.Println(d)
	fmt.Println(reflect.TypeOf((d)))

	var e int
	fmt.Println(e)

	var g bool
	fmt.Println(g)
	fmt.Println(reflect.TypeOf((g)))

	var h = 10
	fmt.Println(h)
	fmt.Println(reflect.TypeOf((h)))

	f := "apple"
	fmt.Println(f)
	fmt.Println(reflect.TypeOf((f)))

	i, j, k := "pizza", 1, true
	fmt.Println(i, j, k)
	fmt.Println(reflect.TypeOf((i)))
	fmt.Println(reflect.TypeOf((j)))
	fmt.Println(reflect.TypeOf((k)))
}

 

결과는 이렇게 진짜 말하는대로 잘 나왔다. := 를 이용해서도 여러 개의 변수를동시에 선언할 수 있고,

type casting도 알아서 잘 되는 것을 볼 수 있다.

다양한 타입의 변수를 var 를 이용해서 여러 타입을 한 번에 선언하는 방식은 찾을 수가 없었다.

내가 구글링을 대충해서 그런걸 수도 있긴하지만 무튼! 굳이 찾아볼 필요도 없이 그냥 := 를 쓰면 될 것 같다.

 

변수 선언하는 것만 봐도 꽤나 편한 언어인 것 같다.

 

TMI로 := 표현은 파이썬에도 있는데, 파이썬 3.8 이상부터 사용 가능한 표현식이고, 반복문과 같은 곳에서 대입 표현식으로 이용된다고 한다.

궁금하면 아래 링크 읽어보면 이해하기 쉽게 쓰여있다.

https://docs.python.org/ko/3/whatsnew/3.8.html

 

파이썬 3.8의 새로운 기능 — Python 3.10.4 문서

파이썬 3.8의 새로운 기능 편집자 Raymond Hettinger This article explains the new features in Python 3.8, compared to 3.7. Python 3.8 was released on October 14, 2019. For full details, see the changelog. 요약 – 배포 주요 사항 새로운

docs.python.org

 

반응형