[목차]
1. Go 데이터 타입
2. 변수 선언과 초기화
3. 여러 변수의 선언과 초기화
4. 상수
1. Go 데이터 타입
1. Basic type
- Numbers
- Booleans
- Strings
int8 | 8-bit signed integer |
int16 | 16-bit signed integer |
int32 | 32-bit signed integer |
int64 | 64-bit signed integer |
uint8 | 8-bit unsigned integer |
uint16 | 16-bit unsigned integer |
uint32 | 32-bit unsigned integer |
uint64 | 64-bit unsigned integer |
int | 32-bit 시스템에서는 int32, 64-bit 시스템에서는 int64 |
uint | 32-bit 시스템에서는 int32, 64-bit 시스템에서는 int64 |
rune | unicode 문자 코드를 저장할 때 사용. int32와 크기 동일 |
byte | byte 단위로 저장할 때 사용. uint8과 크기 동일 |
uintptr | 포인터를 저장할 때 사용. 32-bit 또는 64-bit 시스템에 맞는 크기 |
float32 | 32-bit IEEE 754 floating-point number |
float64 | 64-bit IEEE 754 floating-point number |
complex64 | float32 real and imaginary component |
complex128 | float64 real and imaginary component |
bool | true or false |
string | string |
2. Aggregate type
- Array
- Struct
3. Reference type
- Pointer
- Slice
- Map
- Function
- Channel
4. Interface type
2. 변수 선언과 초기화
Go에서는 변수를 명시적으로 선언하며, 컴파일러가 타입의 정확성을 확인한다.
Go에서 변수를 선언할 때는 var 키워드를 사용하며, 변수의 타입은 변수의 이름 뒤에 작성한다.
package main
func main() {
var a int // 정수 a
var s string // 문자열 s
}
Go에서는 변수의 초기값을 설정하지 않으면 각 변수 타입에 따른 기본값이 설정된다.
즉, 위 예시에서는 a = 0, s = ""(빈 문자열)으로 설정된다.
변수의 선언과 초기화를 동시에 수행할 수도 있다. 다음은 변수의 선언과 동시에 초기화를 하는 예시이다.
package main
func main() {
var a int = 3 // int
var b = 3 // int
var c float32 = 3.5 // float32
var d = 3.5 // float64
var flag = false // boolean
var s = "Hello" // string
var x int = 3.5 // ERROR ('0.5' (type untyped float) cannot be represented by the type int)
}
초기값의 타입에 따라 변수의 타입이 결정되며, 변수의 타입을 지정한 후 초기화를 하면 해당 타입으로 값을 변수에 할당한다.
단, 값이 변수의 타입으로 간주될 수 없는 경우엔 에러가 발생한다. 위의 예시에서 3.5의 경우, 32bit/64bit float로 모두 사용할 수 있지만, int로는 사용할 수 없기 때문에 에러가 발생한다.
Go에서는 다음과 같은 기능도 제공한다. 변수의 생성과 초기화를 := 를 통해 간단하게 수행할 수 있다.
package main
func main() {
a := 3 // var a int = 3
b := 3.5 // var b float64 = 3.5
s := "Hello" // var s string = "Hello"
}
예를 들어 s := "Hello" 같은 경우, var s string = "Hello" 와 동일한 코드이다.
3. 여러 변수의 선언과 초기화
한 번에 여러 변수를 선언하고 초기화할 수 있다. 아래의 예시를 참고하자.
package main
func main() {
var a, b int = 3, 4 // a == 3 && b == 4
var a, b int = 3, 3.5 // ERROR
var a, b, c = 1, 10, 6 // a == 1 && b == 10 && c == 6
var a, b, c = 1, 10 // ERROR (Assignment count mismatch: 3 = 2)
var a, b = 3, "Hello" // a == 3 && b == "Hello"
a, b := 3, "Hello" // a == 3 && b == "Hello"
}
한 변수를 선언할 때와 동일하게 변수의 타입을 지정할 수도 있고 생략할 수도 있다. 단, 변수의 타입을 지정하는 경우엔 마찬가지로 타입에 맞는 값으로 초기화해야 한다.
변수의 타입을 지정하지 않는 경우에는 var a, b = 3, "Hello" 와 같이 한 번에 여러 타입의 변수를 초기화할 수 있다.
또한, 변수의 개수와 초기값의 개수가 반드시 동일해야 한다.
4. 상수
Go에서는 문자, 문자열, boolean, 숫자값의 상수를 지원하며, const 키워드를 통해 상수를 선언한다. (:= 는 사용할 수 없다)
상수는 변수와 달리 항상 초기화를 해주어야 하며, 초기화된 상수의 값을 다시 설정할 수 없다.
package main
func main() {
const a int // ERROR (Missing value in the const declaration)
const b int = 3
b = 4 // ERROR (Cannot assign to b)
}
상수도 변수와 마찬가지로 타입을 생략할 수 있다.
package main
func main() {
const a = 3
const b = "Hello"
}
단, 숫자형 상수는 변수와 달리 명시적으로 타입을 설정하지 않으면, 상수를 사용하는 시점에 타입을 결정한다.
먼저 아래의 예시를 보자.
package main
func main() {
const a float64 = 3.5
var b int = a * 100 // ERROR (Cannot use 'a * 100' (type float64) as the type int)
}
Go에서는 같은 타입의 숫자 연산만 가능하므로 a * 100로 작성하면 컴파일 에러가 발생한다.
하지만, 만약 상수 a의 타입을 명시하지 않으면 상수를 사용할 때 타입이 결정되므로 컴파일 에러가 발생하지 않는다.
package main
func main() {
const a = 3.14
var b int = a * 100 // b == 314
}
참고)
https://www.geeksforgeeks.org/data-types-in-go/
https://dev-yakuza.posstree.com/ko/golang/constants/
PC로 보시는 것을 권장합니다.
피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^