자바스크립트를 활성화 해주세요

Tucker의 Go 언어 프로그래밍 12장 요약

 ·  ☕ 2 min read

Tucker의 Go 언어 프로그래밍스터디 요약 노트입니다.

12장. 배열

배열의 Go 언어에서의 특징만 확인해보자.

  1. 배열의 길이는 상수로 되어있다. 가변 배열은 slice를 써야 한다.
  2. [...]으로 길이를 자동 완성할 수 있다.
  3. range로 배열을 순회할 수 있다.
  4. len()으로 배열의 길이를 알 수 있다.
  5. =으로 배열을 복사할 수 있다.

range를 통한 배열 순회

Go에서 range를 통해 배열을 순회하는 방식은 python에 비해 index를 쉽게 접근할 수 있다는 장점이 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import "fmt"

func main() {
	var nums [5]int = [...]int{2, 3, 5, 8, 13}

	for i, val := range nums {
		fmt.Printf("nums[%d] = %d\n", i, val)
	}
	fmt.Println()

	for i := 0; i < len(nums); i++ {
		fmt.Printf("nums[%d] = %d\n", i, nums[i])
	}
}
$ ./go_array_loop_with_range
nums[0] = 2
nums[1] = 3
nums[2] = 5
nums[3] = 8
nums[4] = 13

nums[0] = 2
nums[1] = 3
nums[2] = 5
nums[3] = 8
nums[4] = 13

배열의 복사

C계열의 언어는 memcpy()나 배열 순회를 통해 배열을 복사해야 하지만, go에서는 =로 바로 복사가 가능하다.

만약 복사하려는 배열의 길이가 다른 경우, copy()를 통해 복사할 수 있다. go에서는 배열 변수의 타입 검사 시 배열 길이도 비교하기 때문이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import "fmt"

func main() {
	var arrX [5]int
	var arr3 = [3]int{3, 4, 5}
	var arr5 = [5]int{10, 20, 4:50}
	var arr8 = [8]int{7, 6, 5, 4, 3, 2, 1, 0}

	fmt.Println(arrX)

	// go vet: Cannot use 'arr3' (type [3]int) as the type [5]int
	// arrX = arr3
	copy(arrX[0:3], arr3[:])

	fmt.Println(arrX)

	arrX = arr5

	fmt.Println(arrX)

	// src length can exceed dst length
	copy(arrX[:], arr8[1:7])

	fmt.Println(arrX)
}
$ ./go_array_copy
[0 0 0 0 0]
[3 4 5 0 0]
[10 20 0 0 50]
[6 5 4 3 2]

저자 강의


JaeSang Yoo
글쓴이
JaeSang Yoo
The Programmer

목차