Open4

A Tour of Go やっていきメモ

rsmnrsmn

Exercise: Maps

https://go-tour-jp.appspot.com/moretypes/23

package main

import (
    "golang.org/x/tour/wc"
    "strings"
)

func WordCount(s string) map[string]int {
    words := strings.Fields(s)
    m := make(map[string]int)

    for _, word := range words {
        _, ok := m[word]

        if ok {
            m[word]++
        } else {
            m[word] = 1
        }
    }
	
    return m
}

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

スライスのときに書き忘れたけど、Exercise で関数名が引数に渡されるのいきなり現れると、その関数の引数どうなってるんだ…?となっていらない詰まり方をしてしまったというメモ。

rsmnrsmn

Exercise: Fibonacci closure

https://go-tour-jp.appspot.com/moretypes/26

package main

import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func(int) int {
    f, s := 0, 1

    return func(x int) int {
        if x == 0 {
            return 0
        } else if x == 1 {
            return 1
        }

        sum := f + s
        f = s
        s = sum
		
        return sum
    }
}

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

フィボナッチ数列初めて書いた…。

rsmnrsmn

Exercise: Stringers

https://go-tour-jp.appspot.com/methods/18

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() string {
    return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}

func main() {
    hosts := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }
    for name, ip := range hosts {
        fmt.Printf("%v: %v\n", name, ip)
    }
}

byte を string に変換する手順があった方がいいんだろうなではある。