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

プログラミング言語 Go

Go 言語に関する話題。

記事中に出てくるサンプル・コードについては,特に断りがない限り, CC0 相当での取り扱いで(つまり自由に再利用して)構わない。

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

記事の一覧

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