gopher

 

배열은 쉽게말하면 한 종류의 자료형을 나열해놓은 것이다.

 

4 바이트 정수형을 5개 나열하면 20 바이트가 된다. 이름을 하나 정하면 같은 종류의 저장공간을 얼마든지 늘려서 사용할 수 있다.

 

package main

import "fmt"

func main() {
	var x [3]int
	x[2] = 7
	fmt.Println(x)
}

var x [4]int

 

int 형의 공간을 3개를 사용한다. 이름은 x로 한다. 3개라서 0,1,2가 된다. 1,2,3이 아니라는 점은 주의한다.

 

0 0 7

조작한 x[2] 가 아닌 다른 변수들은 0으로 초기화 되었다.

 

*배열에 넣고 평균내기

package main

import "fmt"

func main() {
	var x [3]float32
	x[0] = 87
	x[1] = 77
	x[2] = 95

	var sum float32 = 0
	for i := 0; i < len(x); i++ {
		sum += x[i]
	}
	fmt.Println("배열 : ", x, len(x), "개")
	fmt.Println("합계 : ", sum)
	fmt.Println("평균 : ", sum/float32(len(x)))
}

시험 점수들을 배열에 넣고 평균을 낸다. flota32 형을 선택한 것은 평균을 낼 때 소수점이 포함되기 때문이다. len(x)는 요소의 개수를 리턴한다. for 문의 카운트로 쓸 수 있다.

 

package main

import "fmt"

func main() {
	var x [3]float32
	x[0] = 87
	x[1] = 77
	x[2] = 95

	var sum float32 = 0
	for _, value := range x {
		sum += value
	}
	fmt.Println("배열 : ", x, len(x), "개")
	fmt.Println("합계 : ", sum)
	fmt.Println("평균 : ", sum/float32(len(x)))

}

똑같은 결과를 다르게 만든 것이다. for _, value := range x 는 value에 x의 값들을 리턴한다. 인덱스를 사용하는 것은 불필요하다. _ 이 위치에 인덱스 i 를 사용할 수 있는데 그것은 for 문내에서 쓰이지 않으므로 의미는 없다. 또 사용하지 않는 변수를 만들면 오류를 낸다. 타 언어와 다른 점이다.

 

*배열은 다음의 방법으로도 저장할 수 있다.

	x := [7]float32{
		87,
		77,
		65,
		81,
		99,
		82,
		68,
	}

슬라이스

package main

import "fmt"

func main() {
	slice1 := []int{1, 2, 3}
	slice2 := append(slice1, 4, 5)
	fmt.Println(slice1, slice2)

}

슬라이스 함수를 사용하면 기존의 배열에 새로운 값을 쉽게 추가할 수 있다. append 는 내장함수다.

 

*. make 내장함수

package main

import "fmt"

func main() {
	x := make([]float64, 5)
	x[0] = 10.5
	x[2] = 33.2
	fmt.Println(x)

	arr := []float32{2, 4, 6, 8, 10}
	z := arr[0:5]
	fmt.Println(z)
}

make 내장함수는 다른 방법을 보여준다.

 

*copy 방식

    copy 는 내장 함수이다. 배열을 복사한다.

func main() {
	slice1 := []int{1, 2, 3, 4, 5, 6, 7}
	slice2 := make([]int, 4)
	copy(slice2, slice1)
	fmt.Println(slice1, slice2)
}

이 예제는 slice1의 배열을 만들고, 그 다음에 make 함수로 공간을 4개 할당해 둔다. copy 함수로 1에 있는 배열을 2로 옮길때 공간 4의 제한으로 4개밖에 복사되지 않는다.

 

맵은 해시테이블이나 딕셔너리와 비슷하며 키값에 대응하는 값을 찾는다.

package main

import "fmt"

func main() {
	x := make(map[string]int)
	x["key"] = 10
	fmt.Println(x["key"])
	fmt.Println(x)

	z := make(map[int]int)
	z[100] = 20
	z[101] = 25
	fmt.Println(z)
}

자료형의 대응을 보면 스트링과 정수, 정수와 정수가 대응된다. make 에서 사전에 정의한다.

 

package main

import "fmt"

func main() {
	elements := map[string]string{
		"H":  "Hydrogen",
		"He": "Helium",
		"Li": "Lithium",
		"Be": "Beryllium",
		"B":  "Boron",
	}
	fmt.Println(elements["H"])

	name, ok := elements["He"]
	fmt.Println(name, ok)
}

 

검색을 할 수 있다. 아래 name, ok 명령줄이 그 내용이다. 기본으로 딕셔너리를 검색할 수 있다는 것은 Go에 대한 특성을 시사한다.

 

 

아래의 무료 공개한 책을 참고했다. 저자의 CC 3.0 에 따라 웹사이트를 기재한다. 위가 한글번역 아래가 원문

 

 

Go 프로그래밍 입문

 

codingnuri.com

 

 

An Introduction to Programming in Go | Go Resources

Installers I no longer maintain installers here. For instructions on how to get a text editor and go installed see the Machine Setup guide. The Book An Introduction to Programming in Go. Copyright © 2012 by Caleb Doxsey ISBN: 978-1478355823 This book is n

www.golang-book.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band