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"])
}