hitode909の日記

趣味はマリンスポーツですの日記です

会社でGo勉強会してた

会社でGo勉強会してた.A Tour of Goを進めてる.


これは,数のクラスみたいなやつで,mynumber()するたびに,キーがstringで値がfunc(int) intであるmapを返す.["add"](1)とかすると,クロージャの中の値が書き換えられて返される.このことで,オブジェクトみたいなのを作ってみてる.おもしろいけど,問題があって,mapの値として,intを取ってintを返す関数しか持てない.現在の値を返すget()っていう関数は作れなくて,get(0)みたいにとりあえず意味ない値を渡す必要がある.

package main

import "fmt"

func mynumber() map[string]func(int) int {
    sum := 0
    result := make(map[string]func(int)int)
    result["add"] = func(x int) int {
        sum += x
        return sum
    }
    result["sub"] = func(x int) int {
        sum -= x
        return sum
    }
    return result
}


func main() {
    number1 := mynumber()
    number2 := mynumber()

    fmt.Println(number1["add"](1))
    fmt.Println(number1["add"](1))
    fmt.Println(number1["add"](1))
    fmt.Println(number1["sub"](2))
    fmt.Println(number1["sub"](2))
    fmt.Println(number1["sub"](2))
    fmt.Println(number2["add"](10))
    fmt.Println(number2["add"](10))
    fmt.Println(number2["add"](10))
}

https://gist.github.com/hitode909/7561822


これは立方根を求めるやつ.ニュートン法だから,何度か計算すると値が収束するのだけど,これは,Cbrtを呼ぶと,呼ばれるたびに一度計算を進めて返す関数を返す.返ってきた関数を何度も呼ぶことで値が収束する.おもしろいだけで意味はない.

package main

import "fmt"

func Cbrt(x complex128) func() complex128 {
    z := complex128(1)
    return func() complex128 {
        z=z-(z*z*z-x)/(3*z*z)
        return z
    }
}

func main() {
    cbrt2:=Cbrt(2)
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
    fmt.Println(cbrt2())
}

https://gist.github.com/hitode909/7562180


学習が進んでておもしろいけど,役に立つもの全く作ってなくておもしろい.