Go에서 변수를 선언하는 방법은 다양합니다.
package main
func main() {
var x string = "test"
var y int = 200
}
값을 통해 타입이 예상 가능하다면, 등호(=) 왼쪽의 타입 선언은 생략해도 됩니다.
package main
func main() {
var x = "test"
var y = 200
}
제로 값을 할당하고 싶으면 아래와 같이 선언하면 됩니다.
package main
func main() {
var x string
var y int
}
제로 값에 대한 설명은 아래 포스팅에 나와있습니다.
https://thisisnew-storage.tistory.com/50
이게 var를 이용한 기본적인 선언 방식들이고요.
여기서 다음과 같이 변형된 형태로도 선언할 수 있습니다.
package main
func main() {
var a, b int = 1, 2
var c,d = "test", 100
var e, f string = "hello", "world"
var (
g string
h = 4
i int = 5
j,k = "good", 3.0
l = "life"
)
var m,n float64
}
:= 연산자를 사용해서 변수를 선언할 수도 있습니다.
package main
func main() {
x := "test"
y := 200
a, b := 1, 2
c, d := "hello", 100
e, f := 3.45,"world"
}
:= 연사자를 사용하여 변수를 두 개 이상 선언할 경우에는 특이한 점이 하나 있습니다.
바로 새로 선언하는 변수가 하나라도 있으면, 나머지 변수들은 기존에 값이 있더라도 값이 할당이 된다는 것입니다.
다음 예시를 보시죠.
package main
import "fmt"
func main() {
a := "test"
b := 200
a, b, c := "hello", 400, "world"
fmt.Println("a:", a, "b:", b, "c:", c)
}
a: hello b: 400 c: world
단, 기존 변수들의 타입은 그대로 유지되어야 합니다.
그렇지 않을 경우엔 컴파일 에러가 발생하게 됩니다.
package main
import "fmt"
func main() {
a := "test"
b := 200
a, b, c := "hello", 400, "world"
fmt.Println("a:", a, "b:", b, "c:", c)
a, b, c, d := 1, 2, 3, 4
fmt.Println("a:", a, "b:", b, "c:", c)
}
.\example.go:13:13: cannot use 1 (type untyped int) as type string in assignment
.\example.go:13:13: cannot use 3 (type untyped int) as type string in assignment
const를 사용하면 상수를 선언할 수 있습니다.
상수는 변하지 않는 값을 의미합니다.
https://ko.wikipedia.org/wiki/%EC%83%81%EC%88%98
package main
import "fmt"
const a int = 10
const (
b = "hello"
c = "world"
)
func main() {
const d = 4.5
fmt.Println("a:", a, "b:", b, "c:", c, "d:", d)
}
상수이기 때문에, 새로운 값을 재할당 할 경우 컴파일 에러가 발생합니다.
package main
import "fmt"
const a int = 10
const (
b = "hello"
c = "world"
)
func main() {
const d = 4.5
a = 1
b = "good"
fmt.Println("a:", a, "b:", b, "c:", c, "d:", d)
}
.\example.go:15:4: cannot assign to a (declared const)
.\example.go:16:4: cannot assign to b (declared const)
Go에서 선언된 지역 변수들은 반드시 사용되어야 합니다.
사용하지 않는 지역 변수가 존재할 경우 컴파일 에러가 발생합니다.
package main
import "fmt"
const a = "global"
func main() {
var b = "local"
var c = "local too"
fmt.Println("b:", b)
}
.\example.go:9:6: c declared but not used
5-1. Camel case
Go에서의 변수 선언은 기본적으로 카멜 케이스(Camel case)를 따릅니다.
ex) helloWorld, loremIpsum
변수 선언 시 숫자, 밑줄, 문자 전부 허용되는데요.
다만 Go에서는 유의해야 할 점이 있습니다.
바로 상수의 선언이 다른 언어들과 조금 다르기 때문이죠.
많은 언어에서 상수를 선언할 때, 대문자와 스네이크 케이스를 이용합니다.(Upper snake case)
ex) HELLO_WORLD, LOREM_IPSUM
하지만 Go에서는 첫 번째 문자의 대소문자 여부로 접근 가능성을 따지기 때문에 이렇게 쓰지 않습니다.
동일하게 카멜 케이스로 이름을 붙여주시면 되겠습니다.
접근 제한 여부에 따라 첫 글자의 대소문자가 결정되고요.
5-2. 범위에 따른 변화하는 변수의 이름
변수의 범위가 작을수록 변수의 이름을 짧게 사용합니다.
package main
func main() {
exMap := map[string]int{"a": 1, "b": 2}
for k, v := range exMap {
// k:key, v: value
}
exSlice := []int{1, 2, 3, 4, 5}
for i, v := range exSlice {
// i: index, v: value
}
}
변수의 이름이 짧아지면 장점과 단점이 명확해지는데요.
장점은 코드가 간결해지는 것이고, 단점은 변수의 추적이 어려워지는 것입니다.
만약 변수의 추적이 어려워지는 상황이라면, 그것은 해당 블록이 너무 많은 일을 하기 때문입니다.
Go - 복합 타입 (1) (0) | 2022.11.03 |
---|---|
Go - 기본적인 데이터 타입과 선언 (1) (0) | 2022.11.01 |
zlib을 이용한 데이터 압축 (0) | 2022.10.09 |
Go를 이용하여 가볍게 알아보는 Base64 (0) | 2022.06.10 |
댓글 영역