2022. 6. 6. 20:00ㆍ03. Resources/Go
hello world 다음인가 다다음에 나오는 변수 선언 방법을 보고 이런저런 테스트를 해봤다.
https://gobyexample.com/variables
아래는 제공된 예시 코드이다.
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
'03. Resources > Go' 카테고리의 다른 글
[Go/Golang] Go언어 array 배열 선언 및 크기 구하기 (0) | 2022.06.11 |
---|---|
[Go/Golang] Go 언어 조건문 (switch) (0) | 2022.06.10 |
[Go/Golang] Go언어 조건문 (if/else) (0) | 2022.06.09 |
[Go/Golang] Go 언어 반복문 (0) | 2022.06.08 |
[Go/Golang] mac Go 세팅 및 예제 돌려보기 (0) | 2022.06.05 |