Contenu connexe Similaire à Javaプログラマのための頑張らないGo入門 (20) Javaプログラマのための頑張らないGo入門34. A Tour of Go
http://go-tour-jp.appspot.com/#1
Goことはじめ(Goに従う情報源)
ササッと触ってみたい
人向け
Goことはじめ(Goに従う情報源)
40. Standard Go Project Layout
https://github.com/golang-standards/project-layout
Goことはじめ(Goに従う情報源)
名前に困ったら。
あくまで参考程度に
Goことはじめ(Goに従う情報源)
47. err := hoge();
if err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
48. err := hoge();
if err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
if err != nil でイディオムとして覚え
て良いぐらい頻出
49. if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコードまたは、ココでこう
50. if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
Exceptionない
例外機構ない
err != nil、ただそれだけ
51. if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
pkg/errorsか
xerrorsを使っていきましょう
(今後は多分xerrors)
52. if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
errは関数の戻り値の
一番最後というキマリ↓
たとえば
func makeStr() (string, error)
戻り値は多値に出来る
55. if v, ok := m["a"]; ok {
fmt.Printf("key=%v:value=%v", "a", v)
}
Goってこんなコード
・map
Goってこんなコード
contains的なのは
こうやる
56. hoges := []string{}
hoges = append(hoges, “a”)
hoges = append(hoges, “b”)
hoges = append(hoges, “c”)
fmt.Println(hoges)
// => [a, b, c]
Goってこんなコード
・slice append
Goってこんなコード
57. hoges := []string{}
hoges = append(hoges, “a”)
hoges = append(hoges, “b”)
hoges = append(hoges, “c”)
fmt.Println(hoges)
// => [a, b, c]
Goってこんなコード
・slice append
Goってこんなコード これがslice
58. hoges := []string{}
hoges = append(hoges, “a”)
hoges = append(hoges, “b”)
hoges = append(hoges, “c”)
fmt.Println(hoges)
// => [a, b, c]
Goってこんなコード
・slice append
Goってこんなコード append….append...ap
pend…..
59. hoges := []string{}
hoges = append(hoges, “a”)
hoges = append(hoges, “b”)
hoges = append(hoges, “c”)
fmt.Println(hoges)
// => [a, b, c]
Goってこんなコード
・slice append
Goってこんなコード
sliceはざっくりいうと
可変配列のようなもの
配列を使った方が良い場合もあり。
カジュアルにappendしまくると計算量に
よっては…(ご利用は計画的に)
60. for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
61. for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
さっきのslice
[a, b, c] です
62. for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
rangeで添字と要素を取
得できる
_ で添字は無視、要素
のみhogeに格納
63. for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
64. for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
さっきのmapのmさん
[a:aaaa] です
65. for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
mapのkeyとvalueを
格納できます
67. func deferSample() {
defer fmt.Print("a")
fmt.Print("b")
fmt.Print("c")
}
// => b c a
Goってこんなコード
・defer
Goってこんなコード Javaで言うところのfinally
deferでclose処理とかしたりする
71. GoってこんなコードGoってこんなコード
for _, sut := range []struct {
value string
description string
}{
{value: "1", description: "1です"},
{value: "2", description: "2です"},
{value: "3", description: "3です"},
} {
if !isNumeric(sut.value) {
t.Errorf("expected number , but actual %s. test case :%s", sut.value, sut.description)
}
}
・テーブルドリブンテスト
72. ・テーブルドリブンテスト
GoってこんなコードGoってこんなコード
for _, sut := range []struct {
value string
description string
}{
{value: "1", description: "1です"},
{value: "2", description: "2です"},
{value: "3", description: "3です"},
} {
if !isNumeric(sut.value) {
t.Errorf("expected number , but actual %s. test case :%s", sut.value, sut.description)
}
}
testケースをガッとまとめて
(語彙力)
73. ・テーブルドリブンテスト
GoってこんなコードGoってこんなコード
for _, sut := range []struct {
value string
description string
}{
{value: "1", description: "1です"},
{value: "2", description: "2です"},
{value: "3", description: "3です"},
} {
if !isNumeric(sut.value) {
t.Errorf("expected number , but actual %s. test case :%s", sut.value, sut.description)
}
}
ビャッと検証
(語彙力)
109. ・循環依存
import cycle not allowed
Goを使ってハマった編Goを使ってハマった編
package Aでpackage Bをimport
package Bでpackage Aをimport
しちゃダメよ。
129. ・LSP(Language Server Protocol)
LSP仕様 https://github.com/Microsoft/language-server-protocol
gopls一択の状況(旧名golsp)。
gopls のuser guide https://github.com/golang/tools/blob/master/gopls/doc/user.md
goplsの他にbingoというのがあったが開発を止めてしまった…
https://github.com/saibing/bingo
gocodeも愛用されたがもう開発stop。。詳しくは
https://mattn.kaoriya.net/software/lang/go/20181217000056.htm
golang-serverも中身はgocodeらしいので…という話
まとめボツネタ