1. 변수(Variable), 상수(Constant), 데이터 타입(Data Type)

1.1 변수 선언

// 기본적인 변수 선언
var a int
a = 10

// 동시에 선언 및 초기화
var b int = 20

// 여러 변수를 한 번에 선언
var (
    c int    = 30
    d string = "Hello"
)

// 짧은 선언(:=) - 함수 내부에서만 사용 가능
e := 40

변수 섀도잉(shadowing)

Go에서는 블록 스코프 내에서 동일한 이름의 변수를 선언할 경우, 바깥 스코프의 변수를 “가리는(Shadow)” 일이 발생합니다.

package main

import "fmt"

func main() {
    x := 10
    if true {
        x := 20 // 바깥의 x를 가리는 새로운 x
        fmt.Println(x) // 20 출력
    }
    fmt.Println(x) // 10 출력
}

1.2 상수 선언

const PI float64 = 3.14
const Greeting = "Hello, Go"

iota

iota는 특별한 상수 생성기(constant generator)로, 상수를 반복해서 열거하거나 여러 값을 단순히 1씩 증가시켜야 할 때 유용합니다.

const (
    A = iota // 0
    B        // 1
    C        // 2
)

const (
    _ = iota             // 버림
    KB = 1 << (10 * iota) // 1 << 10 -> 1024
    MB = 1 << (10 * iota) // 1 << 20 -> 1048576
    GB = 1 << (10 * iota) // 1 << 30 -> 1073741824
)

1.3 데이터 타입

Go에는 크게 기본 타입(숫자형, 문자열, 불리언)과 복합 타입(배열, 슬라이스, 맵, 구조체, 포인터, 함수, 채널 등)이 있습니다.

심화: 타입 변환