ASHD Dev_Blog

GO 기본 문법

이재룡
이재룡Jun 25, 2025

[ 1. Variable & Constant ]

Variable

  • var <변수명> <type> = <초기값>
  • 타입 추론 <변수명> := <값>
var i,j int = 1, 2, 3
 n := 10
go

Constant

  • iota : 0번 부터 시작하는 상수 열거형 at (enum을 만들 거나 할 때)
const (
    apple  = iota // 0
    grape         // 1
    orange        // 2
) 
	
const ( 
		r = 1 << iota // 1
		g             // 3
		b             // 4
)
go

[ 2. Datatype ]

String

  • backQuote(’’)
  • DoubleQuote(’’)에서만 /n 과 같은 문자열 해석이 가능
👉
go에서는 type conversion 문제가 발생했을 때,
compile error가 아닌
runtime error가 발생 ( 오류 체크 할 때 주의 필요! )

Pointer

  • &k - 주소 할당
  • *p - 해당 주소의 실제 내용
var p = &k  //k의 주소를 할당
println(*p) //p가 가리키는 주소에 있는 실제 내용을 출력
go

[ 3. Collection ]

Array

  • zero-base 초기화가 자동
  • var <변수명> [크기]<type>
var a [3]int // zero-base
var a1 = [3]int{1, 2, 3}
go

< 응용 : Slice >

  • python처럼 sub slice 이용
  • slice[start idx : end idx +1 ]
s := []int{0, 1, 2, 3, 4, 5}
s = s[2:5]     // 2, 3, 4
s = s[1:]      // 3, 4
go

< 응용 : append 활용 >

func main() {
    sliceA := []int{1, 2, 3}
    sliceB := []int{4, 5, 6}
 
    sliceA = append(sliceA, sliceB...)
    //sliceA = append(sliceA, 4, 5, 6)
 
    fmt.Println(sliceA) // [1 2 3 4 5 6] 출력
}
go

Map

  • 기본형 map [key_type] value_type
  • 키 값 확인 key_val, exists := map["value"]
myMap := map[string]string{
        "keya": "AAA",
        "keyb": "BBB",
        "keyc": "CCC",
        "keyd": "DDD",
}
    
// map 키 체크
    val, exists := tickers["EEE"]
    if !exists {
        println("No key")
}
go

[ 4. 조건문 / 반복문 ]

if / else if / else

  • ( )는 안 쓰지만 { }는 필수
  • else if/else를 쓸 때는 반드시 전 조건의 마지막 ‘}’ 와 같은 라인에 써준다.
  • 다중 조건 ‘;’ 로 가능
if k == 1 {
    println("One")
} else if k == 2; k==3  {  // 다중 조건
    println("Two")
} else {            //같은 라인
    println("Other")
}
go

for (no while)

  • 반복문에서 while이 없음
  • ( )는 사용하지 않음
for i := 1; i <= 100; i++ {
}

for n < 100 { // while문 역할 
}

for { // 무한반복
}
go

< 응용 : range >

  • python처럼 range 사용 가능 (단 index까지 반드시 포함)
  • 기본적으로 break 사용가능

⇒ 즉 index와 리스트에서 뽑은 데이터 총 2개의 값을 for range에서 이용

names := []string{"lee", "kim", "park"}
 
for index, name := range names {
    println(index, name)
}
go

< 응용 : 중첩 루프 탈출 : break[Label] >

  • label을 이용하여 for문을 건너뛰고 반복문 탈출 가능
  • label은 for문 앞에 선언되며, 여러 개의 for문을 한번에 탈출 가능
OuterLoop:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i == 1 && j == 1 { // 1,1이면 바로 모든 루프 탈출
            break OuterLoop
        }
        fmt.Println(i, j)
    }
}
fmt.Println("바로 open loop 탈출")
go