programming language/Go

[Go] go-tour _ moretypes n/27 ์ˆ˜์ • ์ค‘

moaoh 2021. 10. 1. 15:07

ํ•ด๋‹น๊ธ€์€ ์•„๋ž˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.

 

Go๋ฅผ ํ–ฅํ•œ ์—ฌํ–‰

 

go-tour-ko.appspot.com


Pointers

package main

import "fmt"

func main() {
	i, j := 42, 2701

	p := &i         // point to i
	fmt.Println(*p) // read i through the pointer
	*p = 21         // set i through the pointer
	fmt.Println(i)  // see the new value of i

	p = &j         // point to j
	*p = *p / 37   // divide j through the pointer
	fmt.Println(j) // see the new value of j
}

c์–ธ์–ด์˜ ํฌ์ธํŠธ์™€ ์™„์ „ํžˆ ๋˜‘๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


Structs

package main

import "fmt"

type Vertex struct {
	X int
	Y int
}

func main() {
	fmt.Println(Vertex{1, 2})
}

๊ตฌ์กฐ์ฒด ์—ญ์‹œ c์–ธ์–ด์˜ ๊ตฌ์กฐ์ฒด์™€ ๋™์ผํ•˜๊ณ  ๋™์ž‘ํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์ดˆ๊ธฐ๊ฐ’์„ X = 1, Y = 2๋กœ ๋„ฃ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ

 

๋ฌธ๋ฒ•์ด ๋น„์Šทํ•ด์„œ ํŽธํ•˜๋‹ค ใ…Žใ…Ž


Struct Fields

package main

import "fmt"

type Vertex struct {
	X int
	Y int
}

func main() {
	v := Vertex{1, 2}
	fmt.Println(v.X)
	v.X = 4
	fmt.Println(v.X)
}

๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ

v := Vertex{1, 2} ํ˜•์‹์œผ๋กœ ์ดˆ๊ธฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ฑฐ๋‚˜

v := Vertex{} ํ˜•์‹์œผ๋กœ ์„ ์–ธ์„ ํ•ด์ค˜์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๋ก  ๊ตฌ์กฐ์ฒด์•ˆ์— ๋ณ€์ˆ˜๋“ค๋„ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


Pointers to structs

package main

import "fmt"

type Vertex struct {
	X int
	Y int
}

func main() {
	v := Vertex{1, 2}
	p := &v
	p.X = 1e9
	fmt.Println(v)
}

ํฌ์ธํ„ฐ์™€ ๊ตฌ์กฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ.


Struct Literals

package main

import "fmt"

type Vertex struct {
	X, Y int
}

var (
	v1 = Vertex{1, 2}  // has type Vertex
	v2 = Vertex{X: 1}  // Y:0 is implicit
	v3 = Vertex{}      // X:0 and Y:0
	p  = &Vertex{1, 2} // has type *Vertex
)

func main() {
	fmt.Println(v1, p, v2, v3)
}

v1 : ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ x์™€ y๊ฐ’์„ ๋ชจ๋‘ ๋„ฃ์–ด์ค€ ๊ฒฝ์šฐ.

v2 : x์— ๊ฐ’๋งŒ 1์ด๋ผ๊ณ  ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ  y์˜ ๊ฐ’์€ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฑด๋“ค์—ฌ์ฃผ์ง€์•Š์•˜์œผ๋‹ˆ, y๋Š” default์ธ 0์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

v3 : ์•„๋ฌด๊ฒƒ๋„ ๋ช…์‹œํ•ด์ฃผ์ง€์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋‘ default์ธ 0์ด ๋“ค์–ด๊ฐ„๋‹ค.

p : p์— ๊ฒฝ์šฐ์—๋Š” ํฌ์ธํ„ฐ ๊ฐ’์œผ๋กœ ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์–ด์ค€ ๊ฒฝ์šฐ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ถœ๋ ฅ์„ ํ•ด๋ณด๋ฉด & ์ฃผ์†Œ๊ฐ’ ํ‘œ์‹œ๊ฐ€ ๋ถ™์–ด์„œ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.


Arrays

package main

import "fmt"

func main() {
	var a [2]string
	a[0] = "Hello"
	a[1] = "World"
	fmt.Println(a[0], a[1])
	fmt.Println(a)

	primes := [6]int{2, 3, 5, 7, 11, 13}
	fmt.Println(primes)
}

๊ธฐ๋ณธ์ ์ธ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ์‹œ ๋“ฑ์„ ๋ณด์—ฌ์ค€๋‹ค.

๋ฐฐ์—ด์˜ ๊ธธ์ด์— ๊ฒฝ์šฐ์—๋Š” ํƒ€์ž…์˜ ์ผ๋ถ€๋ผ์„œ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค! ๊ณ ์ •๋œ ๊ฐ’

c์–ธ์–ด์™€ ๋‹ค๋ฅธ์ ์ด ์—†์–ด์„œ ๋˜‘๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ.


Slices

package main

import "fmt"

func main() {
	primes := [6]int{2, 3, 5, 7, 11, 13}

	var s []int = primes[1:4]
	fmt.Println(s)
}

๋ฐฐ์—ด๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์œ ๋™์ ์œผ๋กœ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์›ํ•˜๋ฉด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ง€์šฐ๋Š” ํ˜•์‹์œผ๋กœ ๊ธธ์ด๋ฅผ ์กฐ์ •ํ•ด๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

go์— ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ์Šฌ๋ผ์ด์Šค๋ฅผ ์กฐ๊ธˆ ๋” ํ”ํ•˜๊ณ  ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.


Slices are like references to arrays

package main

import "fmt"

func main() {
	names := [4]string{
		"John",
		"Paul",
		"George",
		"Ringo",
	}
	fmt.Println(names)

	a := names[0:2]
	b := names[1:3]
	fmt.Println(a, b)

	b[0] = "XXX"
	names[0] = "hello"
	fmt.Println(a, b)
	fmt.Println(names)
}

์Šฌ๋ผ์ด์Šค๊ฐ€ ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜์—ฌ ์ƒ์„ฑ์ด ๋œ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๊ฐ’๋“ค์ด ์„œ๋กœ ๊ณต์œ ๋˜๊ณ  

์Šฌ๋ผ์ด์Šค์— ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด

๊ทธ ๊ฐ’์ด ์ „์ฒด์—๋„ ์˜ํ–ฅ์„ ์ฃผ์–ด ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ๊ฐ’๋“ค์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.


Slice literals

package main

import "fmt"

func main() {
	q := []int{2, 3, 5, 7, 11, 13}
	fmt.Println(q)

	r := []bool{true, false, true, true, false, true}
	fmt.Println(r)

	s := []struct {
		i int
		b bool
	}{
		{2, true},
		{3, false},
		{5, true},
		{7, true},
		{11, false},
		{13, true},
	}
	fmt.Println(s)
}

 

์Šฌ๋ผ์ด์Šค ๋ฆฌํ„ฐ๋Ÿด์€ ๊ธธ์ด๊ฐ€ ์—†๋Š” ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด์ด๋ผ๊ณ  ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด [] ํ˜•์‹์œผ๋กœ ๊ฐ’์„ ์ฃผ์ง€์•Š์œผ๋ฉด ์›ํ•˜๋Š” ๋งŒํผ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๊ณ 

์Šฌ๋ผ์ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ struct๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์กฐ์ฒด์™€ ๊ฐ™์ด ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋‹ค๋ฅธ ํƒ€์ž… ์ธ์ž๋ฅผ ๋„ฃ์€ ํ˜•์‹์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ง„์งœ ํŽธํ•˜๊ฒ ๋‹ค๋ผ๊ณ  ๋А๋‚€ ๋ถ€๋ถ„

๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋ถ„์ด๋‚˜ ์†๋„๋ถ€๋ถ„์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐˆ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜, ํŽธํ•จ ํ•˜๋‚˜์ •๋„๋Š” ์ธ์ •!


Slice defaults

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}

	s = s[1:4]
	fmt.Println(s)

	s = s[:2]
	fmt.Println(s)

	s = s[1:]
	fmt.Println(s)
}

์Šฌ๋ผ์ด์Šค๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค ์ •๋ฆฌ

์ƒํ•œ์ด๋‚˜ ํ•˜ํ•œ์˜ ๋”ฐ๋ผ์„œ ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ค„ ์ˆ˜ ์žˆ๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€

python์ฒ˜๋Ÿผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋™์ž‘์„ ํ•œ๋‹ค.

์ƒํ•œ์ด๋‚˜ ํ•˜ํ•œ์„ ๋น„์›Œ๋‘๋Š” ๊ฒฝ์šฐ ๊ฐ’์ด ์ฒ˜์Œ์ด๋‚˜ ๋๊นŒ์ง€๋ผ๋Š” ์‹์œผ๋กœ ํ•ด์„์ด ๋˜๊ฒŒ ๋œ๋‹ค.

์ƒํ•œ์— ๊ฒฝ์šฐ ์ƒํ•œ ๊ฐ’๊นŒ์ง€ ๋‹ด๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒํ•œ -1 ๊นŒ์ง€ ๋‹ด๊ธฐ๊ฐ€ ๋œ๋‹ค.


Slice length and capacity 

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)

	// Slice the slice to give it zero length.
	s = s[:0]
	printSlice(s)

	// Extend its length.
	s = s[:4]
	printSlice(s)

	// Drop its first two values.
	s = s[2:]
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

len : ๋ฌธ์ž๊ฐ€ ๋ช‡๊ฐœ ๋‹ด๊ฒจ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ์Šฌ๋ผ์ด์Šค์— ๊ธธ์ด ( ๋ฌธ์ž๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฐœ์ˆ˜ )

cap : ์Šฌ๋ผ์ด์Šค์˜ ์šฉ๋Ÿ‰ ( malloc ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ ๊ณต๊ฐ„ )

len์˜ ๊ธธ์ด๊ฐ€ cap๋ฅผ ๋„˜์–ด์„  ๊ฒฝ์šฐ์—๋Š” cap๋Š” 2๋ฐฐ์˜ ๊ฐ’์œผ๋กœ ์ฆ๊ฐ ๋œ๋‹ค.

ex) 6.. 12.. 24 

 

์ค‘๊ฐ„์— s[:0] ํ˜•์‹์œผ๋กœ ๊ฐ’์„ ๋ชจ๋‘ ๋‚ ๋ ค๋„ s[:4]๋กœ ๋‹ค์‹œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š”

cap์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ์ด์ „์— ํ• ๋‹น์ด๋œ ๊ฐ’์„ ๊ธฐ์–ตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ len์„ ๋‚ ๋ ค๋ฒ„๋ฆฌ๊ณ  ๋‹ค์‹œ ์žฌ ์„ ์–ธํ•ด๋„ ๊ธฐ์กด ๊ฐ’์ด ์œ ์ง€๋  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค

cap ์ž์ฒด๋ฅผ ํฌ๊ฒŒ ์ค˜๋ฒ„๋ ธ๋‹ค๋ฉด ์“ธ๋ฐ์—†์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๊ฒŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์„ ์ƒ๊ฐํ•ด์„œ ๊ทธ๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐ.


Nil slices

package main

import "fmt"

func main() {
	var s []int
	fmt.Println(s, len(s), cap(s))
	if s == nil {
		fmt.Println("nil!")
	}
}

์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ํ• ๋‹นํ•˜์ง€์•Š์€ ๊ฒฝ์šฐ์—๋Š” nil ์ด๋‹ค.

make๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๋„ฃ์ง€์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ณต๊ฐ„ ์ฐจ์ง€ X


Creating a slice with make

package main

import "fmt"

func main() {
	a := make([]int, 5)
	printSlice("a", a)

	b := make([]int, 0, 5)
	printSlice("b", b)

	c := b[:2]
	printSlice("c", c)

	d := c[2:5]
	printSlice("d", d)
}

func printSlice(s string, x []int) {
	fmt.Printf("%s len=%d cap=%d %v\n",
		s, len(x), cap(x), x)
}

makeํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ํŠœํ† ๋ฆฌ์–ผ

len์— ๋Œ€ํ•œ ๊ธธ์ด๋ฅผ ์ฃผ์ง€์•Š๊ฒŒ ๋˜๋ฉด ๋ชจ๋‘ 0์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ 

len์— ๋Œ€ํ•œ ๊ธธ์ด๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด cap๋Š” 5์ธ๋ฐ len์€ 0์ธ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


Slices of slices

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Create a tic-tac-toe board.
	board := [][]string{
		[]string{"_", "_", "_"},
		[]string{"_", "_", "_"},
		[]string{"_", "_", "_"},
	}

	// The players take turns.
	board[0][0] = "X"
	board[2][2] = "O"
	board[1][2] = "X"
	board[1][0] = "O"
	board[0][2] = "X"

	for i := 0; i < len(board); i++ {
		fmt.Printf("%s\n", strings.Join(board[i], " "))
	}
}

์Šฌ๋ผ์ด์Šค์—๋Š” intํ˜•๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ string float ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

+ 2์ฐจ์› ์Šฌ๋ผ์ด์Šค ์„ ์–ธ ๋ฐฉ๋ฒ•


Appending to a slice

package main

import "fmt"

func main() {
	var s []int
	printSlice(s)

	// append works on nil slices.
	s = append(s, 0)
	printSlice(s)

	// The slice grows as needed.
	s = append(s, 1)
	printSlice(s)

	// We can add more than one element at a time.
	s = append(s, 2, 3, 4)
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

append๋ฅผ ํ†ตํ•ด์„œ ์Šฌ๋ผ์ด์Šค์— ๊ฐ’์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

"append ์˜ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ s ๋Š” ์Šฌ๋ผ์ด์Šค์˜ ํƒ€์ž… T ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ T ๊ฐ’๋“ค์€ ์Šฌ๋ผ์ด์Šค์— ์ถ”๊ฐ€ํ•  ๊ฐ’๋“ค์ž…๋‹ˆ๋‹ค."


Range

package main

import "fmt"

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}

func main() {
	for i, v := range pow {
		fmt.Printf("2**%d = %d\n", i, v)
	}
}

range ์Šฌ๋ผ์ด์Šค์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

python์˜ range์™€ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํžˆํžˆ ์งฑ ์ข‹์•„


Range continued

package main

import "fmt"

func main() {
	pow := make([]int, 10)
	for i := range pow {
		pow[i] = 1 << uint(i) // == 2**i
	}
	for _, value := range pow {
		fmt.Printf("%d\n", value)
	}
}

๊ธฐ๋ณธ์ ์œผ๋กœ 

for i, value := range pow

ํ˜•์‹์œผ๋กœ ์ธ๋ฑ์Šค์™€ value ๊ฐ’์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

for _, value := range pow

ํ˜•์‹์œผ๋กœ ํ•˜๋ฉด ๊ฐ’์„ ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

for i := range pow

์ธ๋ฑ์Šค๊ฐ€ ์šฐ์„  ์ˆœ์œ„๋กœ ๋˜์–ด i์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋‹ด๊ธด๋‹ค.


Exercise: Slices

package main

import "golang.org/x/tour/pic"

func Pic(dx, dy int) [][]uint8 {
	ss := make([][]uint8, dy)
	for y := 0; y < dy; y++ {
		s := make([]uint8, dx)
		for x := 0; x < dx; x++ {
			s[x] = uint8((x + y) / 2)
			// s[x] = uint8(x * y)
			// s[x] = uint8(x ^ y)
		}
		ss[y] = s
	}
	return ss
}

func main() {
	pic.Show(Pic)
}

(x+y)/2  ,  x*y  ,   x^y  

pic.Show๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์œ„์™€๊ฐ’์ด ๊ฐ’์— ๋”ฐ๋ผ์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค์ค€๋‹ค.

slice๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ด๋ผ? ๋ผ๋Š” ์˜๋ฏธ


Maps

package main

import "fmt"

type Vertex struct {
	Lat, Long float64
}

var m map[string]Vertex

func main() {
	m = make(map[string]Vertex)
	m["Bell Labs"] = Vertex{
		40.68433, -74.39967,
	}
	fmt.Println(m["Bell Labs"])
}

map : key๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•ด์‹œํ…Œ์ด๋ธ”์„ ๊ตฌํ˜„ํ•œ ๊ตฌ์กฐ