Recommended
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PDF
【メタサーベイ】基盤モデル / Foundation Models
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
PDF
PPTX
PDF
PDF
PDF
PDF
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PDF
Java によるクラウドネイティブ の実現に向けて
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PPTX
PDF
PDF
PPTX
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
TypeScript & 関数型講座 第3回 関数型入門
PPTX
PHP と SAPI と ZendEngine3 と
PDF
PlaySQLAlchemy: SQLAlchemy入門
PDF
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
怖くないSpring Bootのオートコンフィグレーション
PDF
PDF
More Related Content
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PDF
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PDF
【メタサーベイ】基盤モデル / Foundation Models
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
PDF
PPTX
What's hot
PDF
PDF
PDF
PDF
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PDF
Java によるクラウドネイティブ の実現に向けて
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PPTX
PDF
PDF
PPTX
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
TypeScript & 関数型講座 第3回 関数型入門
PPTX
PHP と SAPI と ZendEngine3 と
PDF
PlaySQLAlchemy: SQLAlchemy入門
PDF
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
怖くないSpring Bootのオートコンフィグレーション
Similar to Javaプログラマのための頑張らないGo入門
PDF
PDF
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PDF
PDF
PDF
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会
PDF
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PDF
マスターオブゴールーチンアンドチャネル スタートGo #1
PDF
PPTX
Go guide for Java programmer
PDF
PDF
PDF
PDF
PDF
PDF
PPTX
PDF
PPTX
More from yy yank
PDF
PDF
VMの歩む道。 Dalvik、ART、そしてJava VM
PDF
PDF
【こっそり始める】Javaプログラマコーディングマイグレーション
PDF
PDF
PDF
PDF
PDF
PDF
PPTX
PDF
Javaプログラマのための頑張らないGo入門 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. A Tour of Go
http://go-tour-jp.appspot.com/#1
Goことはじめ(Goに従う情報源)
ササッと触ってみたい
人向け
Goことはじめ(Goに従う情報源)
35. 36. 37. 38. 39. 40. Standard Go Project Layout
https://github.com/golang-standards/project-layout
Goことはじめ(Goに従う情報源)
名前に困ったら。
あくまで参考程度に
Goことはじめ(Goに従う情報源)
41. 42. 43. 44. 45. 46. 47. 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)
戻り値は多値に出来る
53. 54. 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を
格納できます
66. 67. func deferSample() {
defer fmt.Print("a")
fmt.Print("b")
fmt.Print("c")
}
// => b c a
Goってこんなコード
・defer
Goってこんなコード Javaで言うところのfinally
deferでclose処理とかしたりする
68. 69. 70. 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)
}
}
ビャッと検証
(語彙力)
74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. ・循環依存
import cycle not allowed
Goを使ってハマった編Goを使ってハマった編
package Aでpackage Bをimport
package Bでpackage Aをimport
しちゃダメよ。
110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 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らしいので…という話
まとめボツネタ
130. 131. 132. 133. 134.