@k_nishijima
Hello worldの次の一歩
1
第2回Golang勉強会 in Okinawa ライトニングトーク
2016年5月21日 @k_nishijima
The gopher stickers was made by Takuya Ueda.
Licensed under the Creative Commons 3.0 Attributions license.
@k_nishijima
前回の勉強会に参加して
初めてgoを触ったひと〜?
その次に何をしました?
2
@k_nishijima
今回は
「HelloWorldの次の一歩」
を現在進行形でご報告します。
3
@k_nishijima
あんた誰?
4
西島 幸一郎 / にしじま こういちろう

アールスリーインスティテュート ソリューションアーキテクト
https://www.r3it.com

大阪の会社に所属、宜野湾の自宅から100%リモートワーク
okinawa.goのコアメンバー
JAWS−UG沖縄のコアメンバー
ハッカーズチャンプルー実行委員長
ご質問などあればFacebook/Twitterなどでお気軽に〜♪
@k_nishijima
nishijima.koichiro
@k_nishijima
おさらい・前回の勉強会でやったこと
✓ 「A Tour of Go」をみんなでやりました

✓ goとはあんまり関係ないけど

「楽しいエンジニアライフを送るために重要なこと」

発表しました
5
@k_nishijima
で、その後何やった?
6
๏ 改めて環境構築しなおした
๏ 小物ツール書いてみた
๏ 面白そうなライブラリを使ってみた
๏ 仕事で(無理やり)使う機会を作ってみた←イマココ
@k_nishijima
改めて環境構築
7
๏ ブラウザでやるツアーは卒業だ!
๏ go自体はbrewで入れてあったので省略
๏ Emacsで書くのをやめてAtomを入れてみた。

IDEっぽく補完も効いて素敵♪
参考URL
๏ http://www.songmu.jp/riji/entry/prepare-golang-development-environment-on-mac.html
๏ http://www.masakoha.com/archives/997 ←皆さんの先輩のmasaさんのブログw
@k_nishijima
改めて環境構築
8
๏ gore(goのREPL)素晴らしく便利です!
๏ https://www.gitignore.io/もお忘れなく!
gi go > .gitignore
gi emacs >> .gitignore
参考URL
๏ http://motemen.hatenablog.com/entry/2015/02/go-repl-gore
@k_nishijima
ハマりどころ(?)
9
๏ プロジェクトのソースディレクトリは

$GOPATH/src/github.com/k-nishijima/exampj/
とかになるよ(やたら深い)
๏ 別ディレクトリにも多分出来るけど調べてない
@k_nishijima
超小物ツール書いてみた
10
๏ エンジニアの皆さんなら、手元にNode.jsだの
perlだのScalaだの、いろいろな言語で書かれ
てるオレオレツール、いっぱいありますよね?
๏ 片っ端からgoで書き直したくなるけど我慢
参考URL
๏ https://gist.github.com/k-nishijima/e8171f50941393480176a76343f6d90c
@k_nishijima
超小物ツール書いてみた
11
๏ go build ソース.go して

出来たバイナリを /usr/local/bin/ に入れて使ってるw
๏ 「それdateコマンドで出来るじゃん」とか

言ってはいけない(๑•̀ ㅂ•́ )‫✧ﻭو‬
@k_nishijima
何が分かるか
12
๏ 基本的なこと
๏ コマンドライン引数の取り方、

ファイル入出力など、標準ライブラリの分布
๏ 明示的な型変換
などなど
参考URL:このレベルでは、およそ逆引きを見れば解決することが多い(^_^;)
๏ http://ashitani.jp/golangtips/index.html
@k_nishijima
面白そうなライブラリを使ってみた
13
๏ GitHubを見てると、興味深いものがいろいろある。ライセンスも
APL/MITが多い。オープンソース最高♪ オレも貢献したい!
๏ 例えば「go-chat-bot」
๏ でもこれ clone してきても、なんか上手くビルドできない・・・
参考URL:
๏ https://github.com/avelino/awesome-go
๏ https://github.com/go-chat-bot/bot
@k_nishijima
でも使うだけなら出来るよ!
14
参考URL:
๏ https://github.com/Masterminds/glide
๏ http://qiita.com/tienlen/items/8e192e68d6b18bec3b4a
๏ 依存モジュールの管理(Package Management)はいろいろな流儀がある模様
๏ 前回の@Tomohiroさんの資料ではgovendでしたが、ここではglideを使って
みる
๏ 自分のソースディレクトリ配下にvendorディレクトリができるの
で、.gitignore に追加をお忘れなく
@k_nishijima
おもむろにサンプルソースを貼って…
15
> $ cat botcmd.go
> package main
>
> import (
> "os"
>
> "github.com/go-chat-bot/bot/slack"
> _ "github.com/go-chat-bot/plugins/catfacts"
> _ "github.com/go-chat-bot/plugins/catgif"
> _ "github.com/go-chat-bot/plugins/chucknorris"
> // Import all the commands you wish to use
> )
> func main() {
> slack.Run(os.Getenv("SLACK_WESTBOT_TOKEN"))
> }
@k_nishijima
glide upするとvender以下に

ダウンロードしてきてくれる
16
> $ tree vendor/
> vendor/
> ├── github.com
> │   ├── go-chat-bot
> │   │   ├── bot
> │   │   │   ├── LICENCE
> │   │   │   ├── README.md
> │   │   │   ├── bot.go
@k_nishijima
詳細は公式のREADME.mdを
https://github.com/Masterminds/glide
17
@k_nishijima
ここまで来ると
18
๏ 基本的なことが少し分かって
๏ イケてるオープンソースのライブラリを利用して
コードを書くことが出来る様になる

そうしたら・・・次はどうする?
@k_nishijima
無理やり仕事で使ってみる
(^^)/
19
@k_nishijima
実例
20
๏ テキストファイル(UTF8のJSON)の置換処理
๏ 「普通ならperlだよねぇ」

๏ 何故か無理やりgoで書いてみる!
@k_nishijima
個人の感想であり効果・効能を示すものではありません。
21
@k_nishijima
他にもいろいろ
22
๏ Mac(linux)で書いてWindowsのお客様環境で
動かすバッチとか
๏ シングルバイナリ配布をフルに活かせる場面
はいろいろありそう
@k_nishijima
只今の課題:より良い例外処理
23
参考URL:
๏ http://blog.amedama.jp/entry/2015/10/11/123535
๏ http://qiita.com/ruiu/items/ff98ded599d97cf6646e
๏ 人類は if err != nil を何回書き続ければいい
のか・・・
๏ 「そういうものだ」と理解していくのか
๏ 別の綺麗な解があるのか
@k_nishijima
次はもう少し
レベルアップして
帰ってきたい!\(^o^)/オワタ
24

Helloworld次の一歩