(go-02) Go 기본 타입 설명
C 와 Java 를 안다면 Go 를 공부하면 헷갈리는 부분들이 다소 있다. 일반적으로 기본 내장 타입은 비슷해서 이해하기 쉽지만 pointer 와 interface 등을 공부하다 보면 헷갈리기 마련이다.
일단 먼저 기본 타입에 대해서 설명한다.
Built-in Type
기본 내장 타입에는 boolean, integer, rune, float, byte, string 이 있다. 물론 complex type 도 있지만 이는 생략하겠다. 기본 내장 타입은 zero 값을 갖고 있다.
이 중에서 숫자 타입은 integer, rune, float 이다.
boolean
boolean 의 zero 값은 false 이다.
var isDev bool
var isTrue = true
fmt.Println(isDev)
fmt.Println(isTrue)
--- output ---
false
true
변수 선언은 var 변수명 타입
으로 선언할 수 있다. 이렇게 설명하면 zero 값으로 false 가 자동 대입된다.
다른 방법은 var 변수명 = 값
과 같이 변수를 선언하면서 값을 대입하는 것이다. 그럼 값을 보고 알아서 타입을 결정해 준다.
Integer (숫자 타입 중 하나)
Integer type 은 int8, int16, int32, int64, uint8, uint16, uint32, uint64
이다. 그리고 특별한 integer 타입으로 byte
와 rune
타입이 있다.
byte
는 uint8
의 별칭으로 unit8
보다는 byte
를 주로 쓰게 된다.
rune
은 int32
의 별칭이다.
보통 Integer Type 은 int
로 많이 사용하는데, 32bit cpu 이면 int32, 64bit cpu 이면 int64 와 동일하다.
int 의 zero 값은 0 이다.
var x int
var y int = 1
var z = 2
fmt.Println(x)
fmt.Println(y)
fmt.Println(z)
--- output ---
0
1
2
Float (숫자 타입 중 하나)
Float type 은 float32, float64
이 있다.
float type 의 zero 값은 int 와 동일하게 0 이다.
var p float64
var q = 0.0
fmt.Println(p)
fmt.Println(q)
--- output ---
0
0
숫자 타입 간에는 편하게 해당 타입으로 변환이 가능하다.
var x int = 10
var p float64 = 20.2
fmt.Println(x + int(p))
fmt.Println(float64(x) + p)
--- output ---
30
30.2
String
string
의 zero 값은 empty string 이다. Java 에서는 null string 이 있지만 Go 에서는 null 이 아니다.
string
과 자주 사용되는 타입은 rune
과 byte
이다.
앞에서 숫자 타입은 서로 타입 변환이 해당 타입으로 감싸주면 된다고 설명했는데 string, rune, byte
도 서로 타입 변환이 가능하다.
Go 최신 버전에서는 숫자 타입을 단순히 string 으로 감싸는 것은 체크 시에 에러가 발생한다.
var r rune = 'r'
var s string = string(r)
var b byte = 'b'
var s2 string = string(b)
fmt.Println(r)
fmt.Println(b)
fmt.Println(s)
fmt.Println(s2)
--- output ---
114
98
r
b
rune
과 byte
는 int
타입의 별칭이라 숫자 값이 출력된 것을 이해하자.
나중에 설명하겠지만 []
를 사용하여 slice
(배열과 비슷한) 타입을 활용하면 string
을 []byte
혹은 []rune
으로 변환할 수 있다.
var s string = "Hello, 😀"
var bs []byte = []byte(s)
var rs []rune = []rune(s)
fmt.Println(bs)
fmt.Println(rs)
--- output ---
[72 101 108 108 111 44 32 240 159 152 128]
[72 101 108 108 111 44 32 128512]
😀 이모지 값은 utf-8 으로 표시해야 되기 때문에 byte
는 [240 159 152 128] 와 같이 4 바이트로 표시되고 rune
은 [128512] 로 표시된다. byte 는 int8 이고, rune 은 int32 임을 기억하자.
이렇게 보면 string 은 rune 으로 변환하는 것이 편리하다.
마지막으로 Short Variable Delcaration Operator(:=
) 를 사용하여 var
와 type
키워드 없이 변수를 선언하고 바로 할당할 수 있다.
var a, b int = 1, 2
var c, d = 3, "a"
i := 10
x, s := 20.5, "Hello World"
--- output ---
1 2 3 a
10 20.5 Hello World