Golang { Syntax int := 4 }

Golang Syntax _4


15. 맵 (Maps)

package main
import "fmt"

type Vertex struct {
    Lat, Long float64
}

var m = map[string]Vertex{
    "Bell Labs": Vertex{
        40.68433, -74.39967,
    },
    "Google": {
        37.42202, -122.08408,
    },
}

func main() {
    fmt.Println(t, m) // map[Bell Labs:{40.68433 -74.39967} Google:{37.42202 -122.08408}]
}
  •  Go에서 맵은 값에 key를 지정한다.
  • 맵은  반드시 사용하기 전에  make를 명시해아한다.
  • make를 수행하지 않은 nil 에는 값을 할당할 수 없다.
  • 만약 상위의 타입이 타입명이라면 리터럴에서 타입명을 생략해도 된다.
    즉 "Bell Labs": {40.68433, -74.39967} 와 "Bell Labs": Vertex{40.68433, -74.39967}는 같은 뜻이다.
  • 맵 다루기 >
        맵의 요소를 생성/ 수정 :  m[key] = data
        요소값 가져오기 : val = m[key]
        키 존재 여부 확인 : val, has_key = m[key] >>  만약 m[key]가 존재하지 않는다면 has_keyfalse가, valzero value이 할당된다.

16. 연습문제

WordCount 함수를 구현합니다. 이 함수는 s라는 문자열 내에서 각각의 “단어”의 등장 횟수를 나타내는 맵을 반환해야 합니다. wc.Test 함수는 주어진 함수를 이용하여 테스트를 실행한 뒤에 그 성공 여부를 출력해 줍니다.

package main
import (
    "code.google.com/p/go-tour/wc"
    "strings"
)

func WordCount(s string) map[string]int {
    m := make(map[string]int)
    for _, key := range strings.Fields(s) {
        _, ok := m[key]
        if ok {
            m[key]++
        } else {
            m[key] = 1
        }
    }
    return m
}

func main() {
    wc.Test(WordCount)
}

 

17. 함수 값과 클로저

package main
import "fmt"

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

func main() {
    pos, neg := adder(), adder()
    for i := 0; i < 10; i++ {
        fmt.Println(
            pos(i),
            neg(-2*i),
        )
    }
}
  • Go에서  함수를 value(값)이다. 값이기 때문에 변수에 저장해 사용할 수 있다.
  • 함수는 클로저(full closures)이다. 위 예제에서 보면 각각의 pos와  neg의  sum 변수가 존재하는 걸 볼 수있다.

18. 연습문제

fibonacci 함수를 구현합니다. 이 함수는 이어지는 피보나치 수를 반환하는 함수 (클로져)를 반환해야 합니다.

package main
import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
    x1 := 1
    x2 := 2
    return func() int {
        x3 := x1+x2
        x1, x2 = x2, x3
        return x3
    }
}

func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Println(f())
    }
}

 

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.