개발/GO
[Golang] Variables 변수 선언
피클s
2022. 3. 10. 19:26
이 글은 Variables in Go (Golang) - Welcome To Golang By Example의 글을 번역 및 재가공하여 작성한 글입니다.
목차
1. 명명 규칙
- 변수명은 오직 문자 또는 _ 로 시작할 수 있습니다.
- 그다음으로는 모든 숫자와 문자, _ 를 사용할 수 있습니다.
- 대소문자를 구분합니다.
- Golang의 키워드는 사용할 수 없습니다.
- 길이 제한은 없습니다.
2. 변수 선언
2-1. 초기값이 없는 단일 변수 선언
package main
import "fmt"
func main() {
var number int
var str string
var flo float64
var boolean bool
fmt.Println(number, str, flo, boolean)
}
결과는 0, 빈문자, 0, false입니다.
이것은 초기값이 없을 때 할당되는 값입니다.
0 0 false
2-2. 초기값이 있는 단일 변수 선언
package main
import "fmt"
func main() {
var number int = 341123
fmt.Println(number)
}
341123
2-3. 변수 선언 한 번에 하기
package main
import "fmt"
func main() {
var aaa, bbb int
var ccc, ddd int = 1, 2
fmt.Println(aaa, bbb, ccc, ddd)
}
0 0 1 2
2-4. 변수 선언 한 번에 하기2
package main
import "fmt"
func main() {
var (
aaa int
bbb int = 8
ccc string = "a"
)
fmt.Println(aaa, bbb, ccc)
}
0 8 a
2-5. 변수 타입 자동 추론
변수 타입을 지정하지 않았을 때는 자동 추론됩니다.
package main
import "fmt"
func main() {
var t = 123 // int
var u = "circle" // string
var v = 5.6 // float64
var w = true // bool
var x = 'a' // rune
var y = 3 + 5i // complex128
var z = sample{name: "test"} // main.Sample
fmt.Printf("타입: %T 값: %v\n", t, t)
fmt.Printf("타입: %T 값: %v\n", u, u)
fmt.Printf("타입: %T 값: %v\n", v, v)
fmt.Printf("타입: %T 값: %v\n", w, w)
fmt.Printf("타입: %T 값: %v\n", x, x)
fmt.Printf("타입: %T 값: %v\n", y, y)
fmt.Printf("타입: %T 값: %v\n", z, z)
}
type sample struct {
name string
}
타입: int 값: 123
타입: string 값: circle
타입: float64 값: 5.6
타입: bool 값: true
타입: int32 값: 97
타입: complex128 값: (3+5i)
타입: main.sample 값: {test}
2-6. 변수 선언 키워드 생략
:= 연산자는 함수 내부에서만 사용할 수 있습니다.
package main
import "fmt"
func main() {
num := 1
str1, str2 := "a", "b"
fmt.Println(num, str1, str2)
}
1 a b
2-7. 사용하지 않은 변수는 에러 발생
package main
func main() {
var a = 1
}
a declared but not used
2-8. 한번 선언한 변수는 다른 타입을 넣을 수 없다
package main
func main() {
var aaa int = 1
aaa = "atest"
bbb := 1
bbb = "btest"
}
./prog.go:5:6: cannot use "atest" (type untyped string) as type int in assignment
./prog.go:8:6: cannot use "btest" (type untyped string) as type int in assignment
2-9. 로컬 변수
블록 또는 함수 내에 정의된 변수
package main
import "fmt"
func main() {
var aaa = "test"
fmt.Println(aaa)
if i := 0; i < 3 {
fmt.Println(i)
}
fmt.Println(i) // i는 if문 안에서만 접근할 수 있다.
}
func testLocal() {
fmt.Println(aaa) // aaa는 main함수 안에서만 접근할 수 있다.
}
./prog.go:13:14: undefined: i
./prog.go:17:14: undefined: aaa
2-10. 전역 변수
- 파일의 맨 위에 선언된 경우 패키지 내에서 전역이 됩니다.
- 소문자로 시작하는 경우 정의가 포함된 동일 패키지 내에서만 액세스 할 수 있습니다.
- 다른 파일이라 하더라도 같은 패키지라면 액세스 할 수 있습니다.
- 대문자로 시작하는 경우 다른 패키지 외부에서 액세스 할 수 있습니다.
- 전역 변수는 프로그램이 종료될 때까지 사용할 수 있습니다.
package main
import "fmt"
var aaa = "test"
func main() {
testGlobal()
}
func testGlobal() {
fmt.Println(aaa)
}
test