帰ってきた「しっぽのさきっちょ」

プログラミング言語 Go

Go 言語に関する話題。

記事中に出てくるサンプル・コードの一部は spiegel-im-spiegel/go-practice および paiza.IO で公開している。 これらのコードの取り扱いは CC0 でどうぞ。

なお書籍の『プログラミング言語Go』とは何の関係もないのであしからず。 (どちらかというとタイトルは『プログラミング言語C』からのパクリです)

記事の一覧

  1. (by Spiegel, ) #bookmark #golang
    » 本業が忙しくて Go 言語をかまってあげる暇がないのだが,ブックマークばっかり溜まっていくので,定期的に吐き出しておく。
  2. (by Spiegel, ) #golang #helloworld #install
    » みんなだいすき Hello World!
  3. (by Spiegel, ) #golang #package
    » 今回は Go 言語のパッケージ管理について。
  4. (by Spiegel, ) #algorithm #channel #golang #goroutine #math #message-passing #prime-number #slice
    » これまた,みんな大好き素数探索アルゴリズム
  5. (by Spiegel, ) #astronomy #golang #julian-day-number #math #time
    » 今回は暦で遊びます。とりあえず,簡単なところで「ユリウス日」をいってみるか。
  6. (by Spiegel, ) #github #golang #package
    » 今後のことを考えてパッケージ化の作業を行うことにします。
  7. (by Spiegel, ) #golang #testing
    » パッケージ化したのならテストをしましょう。
  8. (by Spiegel, ) #godoc #golang
    » パッケージ化したのならドキュメントを書きましょう。
  9. (by Spiegel, ) #character #golang #rune #string #unicode
    » 今回は文字列について。短めにさくっと。
  10. (by Spiegel, ) #benchmark #golang #join #string
    » Go 言語で文字列の連結を行う際にどうやるのが一番速いか,という話。
  11. (by Spiegel, ) #character #encoding #golang #transform
    » 文字エンコーディング変換に関してはあちこちに記事があるのだが,微妙に古い気がするので,メモとして書き記しておく。
  12. (by Spiegel, ) #engineering #gb #golang #tools
    » 今回は gb を使ってプロジェクト・ベースで Golang のコードを管理してみる。
  13. (by Spiegel, ) #engineering #environment #golang #package #pollution #vendoring
    » go get コマンドは外部パッケージの revision 等をコントロールできず,常に repository の最新コードを取ってこようとする。GOPATH 内に複数のプロジェクトが同居している場合は同じ外部パッケージでもプロジェクトごとに異なるリビジョンを要求する場合があり,管理が煩雑になってしまう。
  14. (by Spiegel, ) #error #exception #golang #interface #panic
    » C++ や Java のような言語圏から来た(私のような)人間にとって Go 言語の「オブジェクト指向」はかなり異質なのだが,慣れてみると逆にとても合理的に見えてくる。この最たるものが error 型である。(追記あり)
  15. (by Spiegel, ) #golang #package #tools
    » 今回はちょっと横道にそれて,パッケージの依存状況を視覚化するツールをご紹介。
  16. (by Spiegel, ) #golang #package
    » Internal Packages の仕組みは 1.4 から存在したが標準パッケージのみの適用だった。 1.5 からは GOPATH 配下のパッケージまで拡張される。
  17. (by Spiegel, ) #atom #editor #engineering #golang #tools
    » ATOM Editor で Go 言語のコーディング環境を整える。 go-plus パッケージの導入について。
  18. (by Spiegel, ) #curl #github #golang #programming
    » これって curl で書けるんなら Go 言語で表現できるんじゃね?
  19. (by Spiegel, ) #engineering #gb #glide #golang #package #tools #vendoring
    » Go 言語 1.5 の vendoring 機能をサポートするツールが glide である。
  20. (by Spiegel, ) #golang #interface #object-oriented #programming #type
    » Go 言語がいわゆる「オブジェクト指向言語」と言えるかどうかについては色々とあるようだが,オブジェクト指向プログラミングを助けるための仕掛けはいくつか存在する。今回はその中の type キーワードを中心に解説していく。
  21. (by Spiegel, ) #cli #facade #golang
    » ファサード・パターンは DDD (Domain-Driven Design) と相性がよい。普通は Web アプリケーションのような多様なサブシステムを持つシステムを設計する際に導入する考え方だが, CLI の場合でもサブコマンドを構成するのであればファサード・パターンがよいだろう。
  22. (by Spiegel, ) #golang #recursion
    » 今回は再帰呼び出しの話。
  23. (by Spiegel, ) #golang #time
    » 今回は日付処理の話。特にフォーマットの定義の仕方はよく忘れるので覚え書きとして記しておく。
  24. (by Spiegel, ) #character #golang #normalization #unicode
    » 今回は少し目先を変えて「Unicode 正規化」のお話。
  25. (by Spiegel, ) #golang #marshal #struct #tags
    » Struct で正規化できる情報であれば,タグを使うことでアプリケーション外部とのやり取りがずっと楽になる。
  26. (by Spiegel, ) #golang #panic #stack
    » panic 時の出力をカスタマイズすることを考える。スタック情報を取得するには, panic を recover で捕まえた上で runtime.Caller() 関数を使う。
  27. (by Spiegel, ) #continuous-integration #cross-compile #github #golang #travis-ci
    » 今回は Travis CI から GitHub へ mitchellh/gox で生成した実行バイナリを deploy することを考える。
  28. (by Spiegel, ) #golang #interface
    » Interface には落とし穴がある。
  29. (by Spiegel, ) #benchmark #channel #golang #goroutine #programming #random #slice
    » というわけで Go 言語で実装することを考えてみる。
  30. (by Spiegel, ) #function #golang #pointer
    » Go 言語の引数は基本的に「値渡し(call by value)」である。「参照渡し(call by reference)」にしたい場合はポインタを使う。
  31. (by Spiegel, ) #error #golang
    » エラーハンドリングのために error を構造化する手段として github.com/pkg/errors というパッケージがあるそうだ。
  32. (by Spiegel, ) #circle-ratio #golang #math #random
    » 乱数(random number)についていい例題がないかなぁ,と考えて「円周率をモンテカルロ法で求めるやつやればいいぢゃん」と思いついた。ので早速試してみる。
  33. (by Spiegel, ) #circle-ratio #cli #facade #golang
    » さっそく推定結果について評価を行いたいところだが,その前に CLI (command-line interface) を整備する。今回は spf13/cobra パッケージを使うことにする。
  34. (by Spiegel, ) #circle-ratio #gaussian #golang #math #random
    » さて,前回書いたコードを利用していよいよ円周率の推定結果を評価してみる。
  35. (by Spiegel, ) #circle-ratio #golang #math #random
    » math/rand パッケージでは rand.Source interface を持つ別の擬似乱数生成器を使うことができる。

今後の予定

Go 言語の用途としては,簡単なコマンドライン・ツールから大規模な Web アプリケーション,あるいは組込み開発など幅広いが,個人的には仕事等で本格的に使う段階ではないため,当面は簡単なコマンドライン・ツールを作ることを目標に評価を進めていく。

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan Brian W. Kernighan 柴田 芳樹
丸善出版 2016-06-20
評価

スターティングGo言語 (CodeZine BOOKS) Go言語によるWebアプリケーション開発 Kotlinスタートブック -新しいAndroidプログラミング Docker実戦活用ガイド グッド・マス ギークのための数・論理・計算機科学

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。

reviewed by Spiegel on 2016-07-13 (powered by G-Tools)

photo
みんなのGo言語【現場で使える実践テクニック】
松木雅幸 mattn 藤原俊一郎 中島大一 牧 大輔 鈴木健太 稲葉貴洋
技術評論社 2016-09-09
評価

WEB+DB PRESS Vol.95 プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) プログラミングElixir Go言語によるWebアプリケーション開発 詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE) WEB+DB PRESS Vol.94 Docker スターティングGo言語 (CodeZine BOOKS) オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

リファレンス本なのに索引が貧弱。これなら Kindle で買ってもよかったか。 1.7 への言及があるのはよかった。

reviewed by Spiegel on 2016-11-17 (powered by G-Tools)

photo
Go言語によるWebアプリケーション開発
Mat Ryer 鵜飼 文敏
オライリージャパン 2016-01-22
評価

プログラミング言語Go マイクロサービスアーキテクチャ nginx実践入門 (WEB+DB PRESS plus) 改訂2版 基礎からわかる Go言語 サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)

日本語監訳者による解説(付録 B)が意外に役に立つ感じ。 Web アプリケーションだけでなく,サーバサイドで動く CLI アプリへの言及もある。

reviewed by Spiegel on 2016-03-13 (powered by G-Tools)