여름의 서재
[Go 기초] 변수와 상수 & 데이터 타입 본문
변수
var 키워드 뒤에 변수명을 적고, 그 뒤에 변수타입을 적는다.
아래는 a 라는 정수(int) 변수를 선언한 것이다.
var a int
변수 초기값을 할당할 수도 있다.
아래는 float32 타입의 변수 b 에 11.0 이라는 초기값을 할당한 것이다.
varb float32 = 11.
일단 선언된 변수는 그 뒤의 문장에서 해당 타입의 값을 할당할 수 있다.
a = 10
b = 12.0
동일한 타입의 변수가 여러 개 있을 경우, 변수들을 나열하고 마지막에 타입을 한번만 지정할 수 있다.
var i, j, k int
* 변수를 선언하면서 초기값을 지정하지 않으면, Zero Value를 기본적으로 할당한다.
즉, 숫자형에는 0, bool 타입에는 false, 그리고 string 형에는 ""(빈문자열)을 할당한다.
Go에서는 할당되는 값을 보고 그 타입을 추론하는 기능이 자주 사용된다.
var i = 1 var s = "Hi"
* 변수를 선언하는 또 다른 방식으로 Short Assignment Statement ( := ) 를 사용할 수 있다. 즉, var i = 1 을 쓰는 대신 i := 1 이라고 var 를 생략하고 사용할 수 있다. 하지만 이러한 표현은 함수(func) 내에서만 사용할 수 있으며, 함수 밖에서는 var를 사용해야 한다.
또한 선언되 변수가 사용되지 않는다면, 에러를 발생시킨다.
상수
const 키워드 뒤에 상수명을 적고, 그 뒤에 상수타입, 그리고 상수값을 할당한다.
const c int = 10
const s string = "Hi"
Go 에서는 할당되는 값을 보고 그 타입을 추론하는 기능이 자주 사용된다.
즉, 위의 경우 타입, int, string 을 생략하면 Go는 자동으로 그 타입을 추론한다.
const c = 10
const s = "Hi"
여러 개의 상수를 묶어서 지정할 수도 있다.
const (
Visa = "Visa"
Master = "MasterCard"
Amex = "American Express"
)
한가지 유용한 팁으로 상수값을 0부터 순차적으로 부여하기 위해 iota 라는 identifier를 사용할 수 있다.
const (
Apple = iota // 0
Grape // 1
Orange // 2
)
데이터 타입
1. 부울린 타입
- bool
2. 문자열 타입
- string (string은 한번 생성되면 수정될 수 없는 Immutable 타입)
: ''로 둘러싸인 문자열은 Raw String Literal이라 부르는데, 이 안에 있는 문자열은 별도로 해석되지 않고 Raw String 그대로의 값을 갖는다. 예를 들어, 문자열 안에 \n 이 있을 경우 이는 NewLine으로 해석되지 않는다. 또한, Back Quote은 복수 라인의 문자열을 표현할 때 자주 사용된다.
: ""로 둘러싸인 문자열은 Interpreted String Literal이라 부르는데, 복수 라인에 걸쳐 쓸 수 없으며, 인용부호 안의 Escape 문자열들은 특별한 의미로 해석된다. 예를 들어, 문자열 안에 \n 이 있을 경우 이는 NewLine으로 해석된다. 이중인용부호를 이용해 문자열을 여러 라인에 걸쳐 쓰기 위해서는 + 연산자를 이용해 결합하여 사용한다.
3. 정수형 타입
- int, int8, int16, int32, int64
- uint, uint8, uint16, uint32, uint64, complex128
4. Float 및 복소수 타입
- float32, float64, complex6, complex128
5. 기타 타입
- byte: uint8과 동일하며 바이트 코드에 사용
- rune: int32와 동일하며 유니코드 코드 포인트에 사용
📌 데이터 타입 변환
Go에서 타입간 변환은 명시적으로 지정해주어야 한다. 예를 들어 정수형 int에서 uint로 변환할 때, 암묵적 변환이 일어나지 않으므로 uint(i) 처럼 반드시 변환을 지정해 주어야 한다. 만약 명시적 지정이 없이 변환이 일어나면 런타임 에러가 발생한다.
func main() {
var i int = 100
var u uint = uint(i)
var f float32 = float32(i)
println(f, u)
str := "ABC"
bytes := []byte(str)
str2 := string(bytes)
println(bytes, str2)
}
'Skill > Golang' 카테고리의 다른 글
[Go 기초] 슬라이스 (Slice) (0) | 2022.04.13 |
---|---|
[Go 기초] 배열 (Array) (0) | 2022.04.13 |
[Go 기초] 클로저 (0) | 2022.04.13 |
[Go 기초] 함수 (0) | 2022.04.13 |
[Go 기초] 조건문 & 반복문 (0) | 2022.04.13 |