SlideShare a Scribd company logo
1 of 134
Download to read offline
Javaプログラマのための
頑張らないGo入門
JJUG CCC 2019 Fall
#ccc_g2 #jjug_ccc
@yy_yank
#ccc_g2 #jjug_ccc
でつぶやいてください
ハッシュタグ TODOハッシュタグ
自己紹介
やんく(@yy_yank) こいつです
・(株)Abbyのプログラマ
・JJUG CCC登壇4回目?
・iconはsakuraエディタなのに
・vim使う
・Java,Kotlin,Goが好き
「あれ、JavaのカンファレンスでGoの話するの
か?するのか。いいのか?」

採用されて我に返った僕

頑張らないって

タイトルにしたけど

頑張っていきましょう

でもGoを知る近道にはな
るかも?

というセッション

(にしたい)

このセッションは
Goを知り興味を持つきっかけ
という位置付けです。
Goを深く学びたい方向けではありません。
NOTENOTE
・このセッションは個人の感想です。所属企業のうん
ぬんかんぬんではありません。
・ワタシJavaスキ
・ワタシGoもスキ
・言語がスキ
NOTE
・もちろん主観はありますが、それぞれの言語に対し
てフェアに
・良いところを伝えていければ
・Javaの話ほとんどないです
NOTENOTE
・Goってあれでしょ?電車でGoだよね
・なんかGoっていう言語があるらしい
・Go気になるのでちょっととっかかりが欲しい
ぐらいの人
ここにいる人の想定
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・イントロダクション(僕の思うGoとJava) 冒頭から含めて15分
・Goことはじめ 7分
・Goってこんなコード 9分
・Goの特徴 10分
・Go使いはじめ(yy_yank目線) 4.5分
・Goを使ってハマった編(yy_yank目線) 2分
・まとめ 0.5分
アジェンダ発表練習時 RTA(Real Time Attack)の結果です
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
イントロダクションという名の
言いたいこと先に言っとくやつ
「GoとJavaを並べるのは筋が悪い」

架空の人:

「わかる」

ぼく:

・JavaとGoを比べるのは筋が悪い(と思う)
・Javaならこう出来る…を捨てる
・しかし、言語に対してフェアに
・他の言語を知ってると、Goを一通り触らないと良い言語には感じ
ないのではと思う(食わず嫌い的な)
→なんかWebアプリでも作ってみて欲しい
イントロダクション(僕の思うGoとJava)
・すべてを忘れてGoを書いてみるとジワジワ良さを感じてくる(効
果には個人差があります)
・なんか物足りねえけどなんとかなるなぁみたいな
・ほーいいじゃないか、こういうのでいいんだよこういうので(出典:
孤独のグルメ)
イントロダクションイントロダクション(僕の思うGoとJava)
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)
goルーチンはすげえ軽い。Javaの
スレッドは1スレッド固定長1MB(デ
フォルト)、goルーチンは4KBの動的
割り当て
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)Why you can have millions of
Goroutines but only thousands
of Java Threads で検索
https://rcoh.me/posts/why-you
-can-have-a-million-go-routines-
but-only-1000-java-threads/
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)
graalあたりで頑張るで!
(今後数年が楽しみ)
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)
channelでmessage passingがとて
も楽。そしていろんなパターンが出
来る
・Goはコンパイルが速くメモリを食いにくい
→開発(者)に優しい
・Javaは速いんだけどなんだかんだメモリ食ってしまいがち
→開発(者)に優しいかもしれないけど、
メモリには厳しい
イントロダクションイントロダクション(僕の思うGoとJava)
Go Concurrency Patterns で検索
https://talks.golang.org/2012/c
oncurrency.slide#1
・Javaで作れるものは割とGoで作れる(別に低レイヤーのみでも
ない)
・しかしJavaのようにGoを書こうとするとこじれる
・GoらしくGoを書くのが良い
→だがそれが難しい(業務で感じたところ←今ココ)
イントロダクションイントロダクション(僕の思うGoとJava)
・Javaで作れるものは割とGoで作れる(別に低レイヤーのみでも
ない)
・しかしJavaのようにGoを書こうとするとこじれる
・GoらしくGoを書くのが良い
→だがそれが難しい
イントロダクションイントロダクション(僕の思うGoとJava)
Goの方が得意そうなのはTUI、
CLI(コマンド)系、並行処理(記述が
簡単という意味では)
・Javaで作れるものは割とGoで作れる(別に低レイヤーのみでも
ない)
・しかしJavaのようにGoを書こうとするとこじれる
・GoらしくGoを書くのが良い
→だがそれが難しい
イントロダクションイントロダクション(僕の思うGoとJava)
Goで何を作ることが出来るかわかる
良い資料(日本語)
What you can do with Go
https://speakerdeck.com/po3rin
/what-you-can-do-with-go
・JavaもGoも開発のための手段
・手段だけどプログラマにとって大事なもの、選べる手段は多い方
が良い
・GoはJavaの代替にもなるし、Javaでは扱いにくい部分も対応出
来る(TUIやCUIなど)
・メモリ食いにくいので手軽
イントロダクションイントロダクション(僕の思うGoとJava)
・JavaもGoも開発のための手段
・手段だけどプログラマにとって大事な道具、選べる道具は多い
方が良い
・GoはJavaの代替にもなるし、Javaでは扱いにくい部分も対応出
来る(TUIやCUIなど)
・メモリ食いにくいので手軽
イントロダクションイントロダクション(僕の思うGoとJava)
手札を増やしてみませんか?
というのがJavaプログラマへ僕か
ら出来るGoのススメ
(Java好きの人はJavaがとても好きなの知ってるけど )
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・言い尽くされているがGoに入ればGoに従え
Goの目指しているところを知って、それに乗れば自然とうまくいく
はず
・Goは素直なようでクセがある
GoことはじめGoことはじめ
Go言語の初心者が見ると幸せになれる場所 #golang
https://qiita.com/tenntenn/items/0e33a4959250d1a5504
5
Goことはじめ(Goに従う情報源)
迷える人にオススメ
Goことはじめ(Goに従う情報源)
A Tour of Go
http://go-tour-jp.appspot.com/#1
Goことはじめ(Goに従う情報源)
ササッと触ってみたい
人向け
Goことはじめ(Goに従う情報源)
Frequently Asked Questions (FAQ)
https://golang.org/doc/faq
Goことはじめ(Goに従う情報源)
色々気になることが
多い人向け
Goことはじめ(Goに従う情報源)
みんなのGo言語
Goことはじめ(Goに従う情報源)
実用的な軽めの本読みたい人向け
パラパラ漫画したい人向け
Goことはじめ(Goに従う情報源)
プログラミング言語Go(がっつり言語仕様知りたい人)
Go言語による並行処理(goルーチンあたり知りたい人)
Goならわかるシステムプログラミング(良い本)
Goことはじめ(Goに従う情報源)
しっかり
本読みたい人向け
Goことはじめ(Goに従う情報源)
Effective Go
https://golang.org/doc/effective_go.html
Goことはじめ(Goに従う情報源)
Go書いてて指針が
欲しい人向け
Goことはじめ(Goに従う情報源)
Go Patterns
http://tmrts.com/go-patterns/
Goことはじめ(Goに従う情報源)
builderパターンとか
Functional Optionとか
たまに便利
Goことはじめ(Goに従う情報源)
Standard Go Project Layout
https://github.com/golang-standards/project-layout
Goことはじめ(Goに従う情報源)
名前に困ったら。
あくまで参考程度に
Goことはじめ(Goに従う情報源)
Awesome Go
https://awesome-go.com/
Goことはじめ(Goに従う情報源)
イケてるライブラリを
使おう(ご利用は計画的に)
Goことはじめ(Goに従う情報源)
uber-go/guide
https://github.com/uber-go/guide
Goことはじめ(Goに従う情報源)
最近話題になってました。参
考程度に
Goことはじめ(Goに従う情報源)
注意:
golang.jpは情報が更新されなくなっています。
古いものという前提で軽い参考程度になら良いかもしれない
Goことはじめ(Goに従う情報源)Goことはじめ(Goに従う情報源)
IDEなど開発環境は…?
・一番有力なのはVScode
・年貢収めている人ならGoland、IntelliJ IDEA有料版
・vimやemacsでもいける
・gopls使っていきましょう https://github.com/golang/go/wiki/gopls
Goことはじめ(開発環境)Goことはじめ(Goに従う情報源)
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
※コード例がいくつか出ますが、
一旦ざっくり把握してもらえれば良いです。
時間の都合上
色々説明が不足していますので、
雰囲気だけでも感じてください。
NOTENOTE
err := hoge();
if err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
err := hoge();
if err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
if err != nil でイディオムとして覚え
て良いぐらい頻出
if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコードまたは、ココでこう
if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
Exceptionない
例外機構ない
err != nil、ただそれだけ
if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
pkg/errorsか
xerrorsを使っていきましょう
(今後は多分xerrors)
if err := hoge(); err != nil {
log.Error(err)
}
Goってこんなコード
・if err != nil
Goってこんなコード
errは関数の戻り値の
一番最後というキマリ↓
たとえば
func makeStr() (string, error)
戻り値は多値に出来る
m := map[string]string{}
m["a"] = "aaaa"
fmt.Println(m)
//-=> map[a:aaaa]
Goってこんなコード
・map
Goってこんなコード
m := map[string]string{}
m["a"] = "aaaa"
fmt.Println(m)
//-=> map[a:aaaa]
Goってこんなコード
・map
Goってこんなコード
普通にマップです
if v, ok := m["a"]; ok {
fmt.Printf("key=%v:value=%v", "a", v)
}
Goってこんなコード
・map
Goってこんなコード
contains的なのは
こうやる
hoges := []string{}
hoges = append(hoges, “a”)
hoges = append(hoges, “b”)
hoges = append(hoges, “c”)
fmt.Println(hoges)
// => [a, b, c]
Goってこんなコード
・slice append
Goってこんなコード
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
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…..
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しまくると計算量に
よっては…(ご利用は計画的に)
for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
さっきのslice
[a, b, c] です
for _, hoge := range hoges {
fmt.Print(hoge)
}
// => a b c
Goってこんなコード
・range
Goってこんなコード
rangeで添字と要素を取
得できる
_ で添字は無視、要素
のみhogeに格納
for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
さっきのmapのmさん
[a:aaaa] です
for k, v := range m {
fmt.Printf("key=%v:value=%v", k, v)
}
// => key=a:value=aaaa
Goってこんなコード
・range
Goってこんなコード
mapのkeyとvalueを
格納できます
func deferSample() {
defer fmt.Print("a")
fmt.Print("b")
fmt.Print("c")
}
// => b c a
Goってこんなコード
・defer
Goってこんなコード
func deferSample() {
defer fmt.Print("a")
fmt.Print("b")
fmt.Print("c")
}
// => b c a
Goってこんなコード
・defer
Goってこんなコード Javaで言うところのfinally
deferでclose処理とかしたりする
func highOrderFunc(
beforeFunc func(),
action func()) {
beforeFunc()
action()
}
Goってこんなコード
・高階関数
Goってこんなコード
highOrderFunc(
func() { fmt.Print("前処理") },
func() { fmt.Print("処理実行") },
)
// => 前処理 処理実行
Goってこんなコード
・高階関数
Goってこんなコード
highOrderFunc(
func() { fmt.Print("前処理") },
func() { fmt.Print("処理実行") },
)
// => 前処理 処理実行
Goってこんなコード
・高階関数
Goってこんなコード
AOP的なことをやったりとか。
middlewareという
呼ばれ方が多い印象
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)
}
}
・テーブルドリブンテスト
・テーブルドリブンテスト
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ケースをガッとまとめて
(語彙力)
・テーブルドリブンテスト
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)
}
}
ビャッと検証
(語彙力)
Goってこんなコード
・goルーチン(めっちゃ雑)
Goってこんなコード
func job() { // よくあるjob処理
fmt.Println("job Start...")
defer func() {
fmt.Println("job End...")
}()
}
Goってこんなコード
・goルーチン(めっちゃ雑)
Goってこんなコード
func main() {
go job() // goルーチン
// server起動処理など...
// ...
}
goルーチン使ってjobを実行させ
たりとかする
雑すぎてgoルーチン伝わるわけねえ!

Go Concurrency Patterns

でぜひググってください(再掲)

https://talks.golang.org/2012/concurrenc
y.slide#1



・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・Goはクロスプラットフォーム(win,mac,linux)
・色んなOS向けにバイナリを吐ける
・GOOSオプションでOSを指定、GOARCHオプションでアーキテ
クチャを指定するだけでその環境向けの実行可能バイナリを生成
Goの特徴(クロスコンパイル)Goの特徴(クロスコンパイル)
package main
import "fmt"
func main() {
fmt.Printf("Hello worldn")
}
Goの特徴(クロスコンパイル)
・hello worldやっときましょうか
Goの特徴(クロスコンパイル)
・helloアプリケーションとかあるとすると、、
GOOS=linux GOARCH=amd64 go build hello.go
GOOS=darwin GOARCH=amd64 go build hello.go
GOOS=windows GOARCH=amd64 go build hello.go
これを各OSの人たちに配ればOK
Goの特徴(クロスコンパイル)Goの特徴(クロスコンパイル)
・GoにはGCがある
・トリコロールマーク&スイープGC
・なんですけど、まぁ本セッションでは割愛
・GoはC/C++的なレイヤーに近いように思いますが
GCあるのでメモリ管理は不要
Goの特徴(GC)Goの特徴(GC)
・GoにはGCがある
・トリコロールマーク&スイープGC
・なんですけど、まぁ本セッションでは割愛
・GoはC/C++的なレイヤーに近いように思いますが
GCあるのでメモリ管理は不要
Goの特徴(GC)Goの特徴(GC)
GCある!
Javaと一緒!
実質Java!
(出典:カロリーゼロ理論)
・Goは静的型付き
・Goには基本型と構造体がある
・ポインタもある
・interfaceもある
・速度速くて静的型がある、(僕は)嬉しい
Goの特徴(言語仕様)Goの特徴(言語仕様)
・Goは静的型付き
・Goには基本型と構造体がある
・ポインタもある
・interfaceもある
Goの特徴(言語仕様)Goの特徴(言語仕様)
基本型:
bool、string、int int8 int16 int32
int64、uint uint8 uint16 uint32
uint64、uintptr、byte、rune、
float32 float64、complex64
complex128
・Goは静的型付き
・Goには基本型と構造体がある
・ポインタもある
・interfaceもある
Goの特徴(言語仕様)Goの特徴(言語仕様)
構造体:
type Hoge struct {
a string
b int
}
・Goは静的型付き
・Goには基本型と構造体がある
・ポインタもある
・interfaceもある
Goの特徴(言語仕様)Goの特徴(言語仕様)
ポインタ:
var a *string
b := “b”
a = &b
・Goは静的型付き
・Goには基本型と構造体がある
・ポインタもある
Goの特徴(言語仕様)Goの特徴(言語仕様)
type Hoge interface {
Get() string
Set(string)
}
・フォーマットで争わなくて済む→gofmtです
・あと、未使用の変数やimportがあるとコンパイルエラーという優
しさ
・Javaもgoogle/google-java-formatとかかけておけば良いと思
うんです
Goの特徴(言語仕様)Goの特徴(言語仕様)
・サーバー/クライアントがある(net/httpパッケージ)
・jsonも扱える(encoding/jsonパッケージ)
・ユニットテスト(testingパッケージ)
・winでもちゃんと動くpath/filepathパッケージ
Goの特徴(言語仕様)Goの特徴(標準package)
・ライブラリの追加が簡単
go get hoge/fuga
Goの特徴(ライブラリ追加、依存管理)
githubとかに公開しておけば
go getとかすぐ出来る感じ
Goの特徴(コマンドライブラリ追加理)
・ライブラリの追加が簡単
go get hoge/fuga
Goの特徴(ライブラリ追加、依存管理)
CUIツールとか配布しやすい。peco
とか
Goの特徴(コマンドライブラリ追加理)
・誰が書いても同じようなコードになる(?)
・Goは本当に簡単か→それなりに難しい。平易に読みやすいが書
くのはまぁまぁ難しい
Goの特徴(Goは簡単か?という話)
読むには読めるけど、
サッと書くには慣れが必要
Goの特徴(Goは簡単か?という話)Goの特徴(誰が書いても同じコード?)
・メソッド名、変数名は略す
・小文字がprivate、大文字がpublic
・スコープはpackage単位、レシーバー単位
・レシーバーとなり得るのはpackageか構造体など
Goの特徴(Javaと違うとこ)Goの特徴(Javaと違うとこ)
・メソッド名、変数名は略す
・小文字がprivate、大文字がpublic
・スコープはpackage単位、レシーバー単位
・レシーバーとなり得るのはpackageか構造体など
Goの特徴(Javaと違うとこ)
大体go vetとかgolintが教えてくれ
るはず
Goの特徴(Javaと違うとこ)
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・クラスが無いけどどうすりゃええの
→structとかにメソッドはやす
→ディレクトリ掘ってpackage作るファイル作る
(むやみに作るのはダメ、ゼッタイ。)
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
・クラスが無いけどどうすりゃええの
→type定義やstructにメソッドはやす
→ディレクトリ掘ってpackage作るファイル作る
(むやみに作るのはダメ、ゼッタイ。)
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
package構成に唯一解はないけど、宗
派はいくつかある
割とみんな悩みながらやってたり割り
切ってたりするらしい
・クラスが無いけどどうすりゃええの
→type定義やstructにメソッドはやす
→ディレクトリ掘ってpackage作るファイル作る
(むやみに作るのはダメ、ゼッタイ。)
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
個人的には
自動生成系 + FW系 + 自前package
で考えながら育てていくのが
良いかなとか
・クラスが無いけどどうすりゃええの
→type定義やstructにメソッドはやす
→ディレクトリ掘ってpackage作るファイル作る
(むやみに作るのはダメ、ゼッタイ。)
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
ばっきばきにレイヤードアーキテクチャ
とかそういうのやるなら多分Javaの方
がやりやすい
(Goで出来ないわけではないが…)
・ボイラープレートが増える?コード量が増える?
→冗長さはあるけど、結局書く人次第。
それ他の言語でも同じなのでは(自戒)
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
ベンダリング
・go module一択になっていくと思われ
ビルド
・普通にgo runとかgo buildが良いと思われ
Goを使ってみる(ビルド、コーディング編)Go使いはじめ(ビルド、コーディング編)
・Javaで言うところのアレ、ある?
・そこに無かったらないですね
・ないものはない!Javaのことは忘れるんだ
※あるものはあります
Javaで言うとこのアレ、ある?Go使いはじめ(Javaで言うところのアレ、ある?)
・文字列操作 stringsパッケージ、substring的なもの = rune
・文字列←→数値 strconv, fmt.Sprint
・文字列フォーマット fmt
・ソート sortパッケージ
・ファイルの読み書き ioutilパッケージ
Javaで言うとこのアレ、ある?Go使いはじめ(Javaで言うところのアレ、ある?)
・Goやってて欲しくなる→強めのコレクションフレームワーク
(anyMatch, filter,map,flatMap,reduce,contains的なもの)
解決法:共通化したり、スニペットとかでガッと書く。
filter欲しいなぁ、、、って考えてる暇に書く。
これは慣れでなんとかなる。
Goやってて欲しくなるものGo使いはじめ(Goやってて欲しくなるもの)
・Goやってて欲しくなる→強めのコレクションフレームワーク
(anyMatch, filter,map,flatMap,reduce,contains的なもの)
解決法:またはgo generateを使う
gen: slice typewriter とか
https://clipperhouse.com/gen/slice/
Goやってて欲しくなるものGo使いはじめ(Goやってて欲しくなるもの)
・Goやってて若干欲しくなる→テスティングライブラリ
・Goとしては、あんまりテスティングライブラリとか使わず、標準の
ものだけ使ってシンプルなものに保てみたいな方針だった記憶
Goやってて欲しくなるものGo使いはじめ(Goやってて欲しくなるもの)
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・Goでハマったとこ超初期→forのイディオム覚えられない
・for hoge := range hoges {...} とかやってしまう
Goを使ってハマった編Goを使ってハマった編
覚えるしかない!rangeで何が取得でき
るのか覚えるのに地味に苦労した
・循環依存
import cycle not allowed
Goを使ってハマった編Goを使ってハマった編
package Aでpackage Bをimport
package Bでpackage Aをimport
しちゃダメよ。
・Goでハマったとこ→slice作りすぎて爆死
むやみにループまわして無邪気にslice生成しまくると
メモリが足りなくなるよ。しょぼいサーバーとか
Goを使ってハマった編Goを使ってハマった編
・Goでハマったとこ→ログ吐いたらプロセス落ちるやん
・log.Fatalはos.Exitを呼んでいる
・カジュアルに使ってはいけない
・panicもカジュアルに使ってはいけない
Goを使ってハマった編Goを使ってハマった編
・GoだったらJavaだったら…という大きな違いは処理面で出にく
い。Goは並列処理は楽に安全にわりかし走らせやすい
・どこが問題になりやすいかといえば、結局外部サービス、DB、
IOなど。これはどの言語でもだと思う
Goを使ってハマった編Goを使ってハマった編
・イントロダクション(僕の思うGoとJava)
・Goことはじめ
・Goってこんなコード
・Goの特徴
・Go使いはじめ(yy_yank目線)
・Goを使ってハマった編(yy_yank目線)
・まとめ
アジェンダアジェンダ
・Goで手軽にマシンに優しいものが作れる
・Goに従えば手段が1つ増える
・アプリケーションを堅実に作れる
・並行処理も便利に使える
まとめまとめ
・Next Stepとなる更なる情報はgolang.tokyoやGo Conference
など
・あなた自身がgopherになることで手に入ります!
(丸投げ)
まとめまとめ
大事な手札を増やしていきましょう。

ありがとうございました。

これ以降のスライドは

時間の都合などで

発表ではカットしたものです

・go製の便利コマンド(個人的な好みによるリストアップ)
peco https://github.com/peco/peco
fzf https://github.com/junegunn/fzf
ghq https://github.com/motemen/ghq
docui https://github.com/skanehira/docui
ctop https://github.com/bcicen/ctop
lf https://github.com/gokcehan/lf
まとめボツネタ
・Go用ゲームライブラリ
https://github.com/hajimehoshi/ebiten
・GUI
https://github.com/avelino/awesome-go#gui
・Android/iOS開発はgo mobileで
https://github.com/golang/go/wiki/Mobile
・gopherjs
https://github.com/gopherjs/gopherjs
まとめボツネタ
・Goで作られているサービス
docker、k8s、istio、terraform、drone、prometheus などなどたくさん
http://namaristats.com/langs/Go
・Goは誰が使っている?
https://github.com/golang/go/wiki/GoUsers
(あ、弊社も使ってますよ!)
まとめボツネタ
・TUIライブラリまとめ
https://appliedgo.net/tui/
tviewとか結構いいらしいです
https://github.com/rivo/tview
まとめボツネタ
・GoのDIコンテナ
wireやdigがあるが、それほどリッチではなさそう
・ORMのベンチマーク
https://github.com/mattn/orm-benchmark
まとめボツネタ
・ORM
ORMのベンチマーク
https://github.com/mattn/orm-benchmark
awesome go ORM
https://github.com/avelino/awesome-go#orm
まとめボツネタ
・validator
go-playground/validator が流行ってる?
awesome-go validation
https://github.com/avelino/awesome-go#validation
まとめボツネタ
・ロガー
zap流行ってる?
zap https://github.com/uber-go/zap
awesome go logging
https://github.com/avelino/awesome-go#logging
まとめボツネタ
・test系ライブラリ
mock https://github.com/golang/mock
assertライブラリ https://github.com/stretchr/testify
カバレッジとってリッチな画面でみたいライブラリ
https://github.com/smartystreets/goconvey
awesome go testing https://github.com/avelino/awesome-go#testing
まとめボツネタ
・lint系やコーディング補助系ツール
errcheck(errチェック漏れ検知) https://github.com/kisielk/errcheck
fillstruct(struct生成) https://github.com/davidrjenni/reftools/cmd/fillstruct
goimports(自動import) https://godoc.org/golang.org/x/tools/cmd/goimports
gomodifytags(structタグ生成) https://github.com/fatih/gomodifytags
keyify https://github.com/dominikh/go-tools/tree/master/cmd/keyify
まとめボツネタ
・lint系やコーディング補助系ツール
iferrチェック https://github.com/koron/iferr
gocycro(循環複雑度チェック) https://github.com/fzipp/gocyclo
dupl(重複コードチェック) https://github.com/mibk/dupl
全部チェックしちゃうlinter https://github.com/golangci/golangci-lint
まとめボツネタ
・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らしいので…という話
まとめボツネタ
・エディタプラグイン(emacs)
go-mode https://github.com/dominikh/go-mode.el
go-eldoc https://github.com/syohex/emacs-go-eldoc
lsp-mode https://github.com/emacs-lsp/lsp-mode
まとめボツネタ
・エディタプラグイン(vim)
vim-go https://github.com/fatih/vim-go
gopher vim https://github.com/arp242/gopher.vim
vim-lsp https://github.com/prabirshrestha/vim-lsp
まとめボツネタ
・Goのレイヤー分割のしんどいところ
循環依存 import cycle not allowed
リッチなDIコンテナが無い
フレームワークとかがプロジェクトによってマチマチ(それは自然)。その中で統
一した構成は結構難しいかもしれないという
まとめボツネタ
・業務アプリケーションの package構成について(個人的感覚)
docker、k8s、istio、terraform、drone、prometheus などなどありますが
多分それをそのまま真似てもうまくいかない。
どういう方針でも自分たち考えて徐々に育てていくことが大事。
OSSのライブラリや SaaSとかIaaS的なものを作っている場合は真似しても良い気がするが、
実際自分たちが作っているのは何なのか …というところ。
レイヤー分割バリバリするようなホニャララアーキテクチャも結構 Goは向いていない。
(かといってそれを実践している人たちを批判したいわけでもない )。
自動生成は受け入れやすいので自動生成系とフレームワークのルールに従う。
ライブラリを掛け合わせて最適化していくのが良いのかなと思いますが、
誰かの言葉を借りてそれを答えだと思わないで欲しいのでこれも答えではありません。
まとめボツネタ
自分の知識不足による誤りなどあれば教
えていただけると幸いです。

適宜、資料修正します。



連絡先

twitter @yy_yank


More Related Content

What's hot

なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Shohei Okada
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)NTT DATA Technology & Innovation
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話Rakuten Group, Inc.
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツpospome
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...NTT DATA Technology & Innovation
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 

What's hot (20)

なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
コードレビュー改善のためにJenkinsとIntelliJ IDEAのプラグインを自作してみた話
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
REST API のコツ
REST API のコツREST API のコツ
REST API のコツ
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Spark SQL - The internal -
Spark SQL - The internal -Spark SQL - The internal -
Spark SQL - The internal -
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 

Similar to Javaプログラマのための頑張らないGo入門

メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法Takuya Ueda
 
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門Takuya Ueda
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~hanachin
 
Goコンパイラのきもち
GoコンパイラのきもちGoコンパイラのきもち
Goコンパイラのきもちmjhd-devlion
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門Shohei Arai
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockNobuhiro Sue
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境Yo Ya
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
php5-gd で画像を弄る話
php5-gd で画像を弄る話php5-gd で画像を弄る話
php5-gd で画像を弄る話Yo Ya
 
基礎からC言語 part1
基礎からC言語 part1基礎からC言語 part1
基礎からC言語 part1Hiroyuki Ito
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはkenhys
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみたYoshihiko Shiraki
 
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!Kiwamu Okabe
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 

Similar to Javaプログラマのための頑張らないGo入門 (20)

メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
Gopenflow demo v1
Gopenflow demo v1Gopenflow demo v1
Gopenflow demo v1
 
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
Goコンパイラのきもち
GoコンパイラのきもちGoコンパイラのきもち
Goコンパイラのきもち
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and SpockJJUG CCC 2011 Fall / Web test automation with Geb and Spock
JJUG CCC 2011 Fall / Web test automation with Geb and Spock
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Go入門
Go入門Go入門
Go入門
 
php5-gd で画像を弄る話
php5-gd で画像を弄る話php5-gd で画像を弄る話
php5-gd で画像を弄る話
 
基礎からC言語 part1
基礎からC言語 part1基礎からC言語 part1
基礎からC言語 part1
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみた
 
JSDoc ToolKit
JSDoc ToolKitJSDoc ToolKit
JSDoc ToolKit
 
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
 

More from yy yank

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係yy yank
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪yy yank
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzzyy yank
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かすyy yank
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlinyy yank
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さないyy yank
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけどyy yank
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたいyy yank
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーションyy yank
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にyy yank
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlinyy yank
 

More from yy yank (12)

VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
Kotlinソースコード探訪
Kotlinソースコード探訪Kotlinソースコード探訪
Kotlinソースコード探訪
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かす
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さない
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 

Javaプログラマのための頑張らないGo入門