パスワードを忘れた? アカウント作成
8347925 journal
日記

beroの日記: GoCon行ってきた

日記 by bero

http://togetter.com/li/487380
http://takuan-osho.hatenablog.com/entry/2013/04/14/the-report-of-the-1st-go-conference-in-japan
http://moonstruckdrops.github.io/blog/2013/04/13/gocon-spring/

map遅いという話があったので、帰ってから少し調べてみた

結論から言えば

        hoge := make(map[string]int);
        hoge["hoge"] = 1;


pkg/runtime/hashmap.c
https://code.google.com/p/go/source/browse/src/pkg/runtime/hashmap.c?name=go1.0.3
内の
runtime·makemap
runtime·mapassign1
等を呼び出す。

コレ差し替えれば速くなるんじゃね?と思ったら絶賛書き換え中だった
https://code.google.com/p/go/source/browse/src/pkg/runtime/hashmap.c

ちなみにstructリテラルや配列リテラルはマジ定数だが、mapリテラルはmap初期化+挿入ループに落ちる。

        fuga := map[string]int{"a":1,"b":2,"c":3}

        kvs := []KeyVal{{"a",1},{"b",2},{"c",3}}
        fuga2 := make(map[string]int);
        for _,kv := range kvs {
                fuga2[kv.k] = kv.v;
        }

と同じ。

最初はA Tour of Goをやってた
あと何問残ってるかわからず心が折れそうだったが、右上の[]が目次だった

Exercise: Images
http://go-tour-jp.appspot.com/#59
で詰まった

http://go-tour-jp.appspot.com/#51
では、

func (v *Vertex) Scale(f float64) {
..
func main() {
        v := &Vertex{3, 4}

でも

        v := Vertex{3, 4}

でも、

        v.Scale(5)

が呼べるんだが、

http://go-tour-jp.appspot.com/#59
だと、

...
func (img *Image) At(x, y int) color.Color { v:=uint8(x^y); return color.RGBA{v,v,255,255} }

func main() {
        m := Image{256,256}
        pic.ShowImage(m)
}

prog.go:18: cannot use m (type Image) as type image.Image in function argument:
        Image does not implement image.Image (At method requires pointer receiver)

というエラーが出て動かない。

        m := &Image{256,256}
        pic.ShowImage(&m)

または

        m := Image{256,256}
        pic.ShowImage(&m)

だと動く。または

func (img Image) At(x, y int) color.Color { v:=uint8(x^y); return color.RGBA{v,v,255,255} }
..
        m := Image{256,256}
        pic.ShowImage(m)

のようにレシーバがポインタ版でなく値版にしても動く。

元は

type Image struct{}

func main() {
        m := Image{}
        pic.ShowImage(m)
}

を書き換えて実装しましょう、という問題なのでコレはハマった。
なんでエラーになるかわからん

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

読み込み中...