LoginSignup
5

More than 5 years have passed since last update.

Go 効率よくなるTips

Last updated at Posted at 2017-11-06

bytesパッケージ、文字列の連結が早くなる

import (
    "bytes"
)

func StringBuild_good() string {
    var buffer bytes.Buffer
    for i := 0; i < 1000; i++ {
        buffer.WriteString("a")
    }
    return buffer.String()
}

mapの特性を利用する

sliceの中で探す時にmapを使うと、スピードが早くなる

// 重複した要素を削除して返却
func removeDuplicate1(args []string) []string {
    results := make([]string, 0, len(args))
    encountered := map[string]bool{}
    for i := 0; i < len(args); i++ {
        if !encountered[args[i]] {
            encountered[args[i]] = true
            results = append(results, args[i])
        }
    }
    return results
}

number format

'%d' % 100      # '100'
'%8d' % 100     # '     100'
'%-8d' % 100    # '100     '
'%08d' % 100    # '00000100'
'%08d' % -100   # '-0000100'
'%.8d' % 100    # '00000100'
'%10.8d' % 100  # '  00000100'
'%-10.8d' % 100 # '00000100  '

range罠

words := []string{"hoge", "fuga", "foo", "bar"}
//1.
for word := range words {
    fmt.Println(word)
}

//2.
for _,word := range words {
    fmt.Println(word)
}


#1.結果
0
1
2
3

#2.結果
hoge
fuga
foo
bar

slice処理tip,『 : 』を効率よく使う

//末尾の要素
v := slice[len(slice)-1]
// 末尾削除
slice = slice[:len(slice)-1]


//先頭の要素 
v:= slice[0]
slice = slice[1:]

pos := 追加する位置
// slice , slice[pos] = append(slice[:pos+1], slice[pos:]...), 追加する要素
slice = append(slice[:pos+1], slice[pos:]...)
slice[pos] = 追加する要素

jsonデータの扱い:

Goでの基本的なJSONデコード処理の書き方は

1.構造体を定義する
2.ファイルやWebAPI等からJSON文字列を取得する
3.json.UnmarshalでJSON文字列をデコードし、結果を構造体変数に放り込む
4.構造体変数のデータを処理をする

となります。

そもそもjson.Unmarshalのデコード結果はinterfaceで返ってくるので、構造体の定義は必須ではないのですが、GoでJSONを扱う上では使った方がよいです。
https://qiita.com/nayuneko/items/2ec20ba69804e8bf7ca3

interfaceからデータを取り出す方法


//JSONデコード
var decode_data interface{}
if err := json.Unmarshal(bytes, &decode_data); err != nil {
    log.Fatal(err)
}
// 表示
for _, data := range decode_data.([]interface{}) {
    var d = data.(map[string]interface{})
    fmt.Printf("%d : %s\n", int(d["id"].(float64)), d["name"])
}   

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5