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

プログラミング言語 Go

Go 言語プログラミングに関する話題。

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

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

記事の一覧

  1. Go 言語に関するブックマーク (by Spiegel, ) #bookmark #golang
    » 本業が忙しくて Go 言語をかまってあげる暇がないのだが,ブックマークばっかり溜まっていくので,定期的に吐き出しておく。
  2. Go 言語に関するブックマーク(未整理分) (by Spiegel, ) #bookmark #golang
    » 「Go 言語に関するブックマーク」に整理しきれない未整理分。
  3. インストールから Hello World まで (by Spiegel, ) #golang #helloworld #install
    » みんなだいすき Hello World!
  4. go get コマンドでパッケージを管理する (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. Go 言語のテスト・フレームワーク (by Spiegel, ) #golang #testing
    » パッケージ化したのならテストをしましょう。
  9. Go 言語のドキュメント・フレームワーク (by Spiegel, ) #godoc #golang
    » パッケージ化したのならドキュメントを書きましょう。
  10. String と Rune (by Spiegel, ) #character #golang #rune #string #unicode
    » 今回は文字列について。短めにさくっと。
  11. 文字列連結はどれが速い? (by Spiegel, ) #benchmark #golang #join #string
    » Go 言語で文字列の連結を行う際にどうやるのが一番速いか,という話。
  12. 文字エンコーディング変換 (by Spiegel, ) #character #encoding #golang #transform
    » 文字エンコーディング変換に関してはあちこちに記事があるのだが,微妙に古い気がするので,メモとして書き記しておく。
  13. gb でプロジェクト・ベースの開発環境をつくる (by Spiegel, ) #engineering #gb #golang #testing #tools
    » 今回は gb を使ってプロジェクト・ベースで Golang のコードを管理してみる。
  14. GOPATH 汚染問題 (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. パッケージ外部からの呼び出しを禁止する Internal Packages (by Spiegel, ) #golang #package
    » Internal Packages の仕組みは 1.4 から存在したが標準パッケージのみの適用だった。 1.5 からは GOPATH 配下のパッケージまで拡張される。
  18. ATOM で Go (by Spiegel, ) #atom #editor #engineering #golang #tools
    » ATOM Editor で Go 言語のコーディング環境を整える。 go-plus パッケージの導入について。
  19. Git.io から短縮 URL を取得するコード (by Spiegel, ) #api #curl #github #golang #programming
    » これって curl で書けるんなら Go 言語で表現できるんじゃね?
  20. Glide で Vendoring (by Spiegel, ) #engineering #gb #glide #golang #package #testing #tools #vendoring
    » Go 言語 1.5 の vendoring 機能をサポートするツールが glide である。
  21. Go 言語における「オブジェクト」 (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. Go 言語の日付処理 (by Spiegel, ) #golang #time
    » 今回は日付処理の話。特にフォーマットの定義の仕方はよく忘れるので覚え書きとして記しておく。
  25. Go 言語と Unicode 正規化 (by Spiegel, ) #character #golang #normalization #unicode
    » 今回は少し目先を変えて「Unicode 正規化」のお話。
  26. Struct タグについて (by Spiegel, ) #golang #marshal #struct #tags
    » Struct で正規化できる情報であれば,タグを使うことでアプリケーション外部とのやり取りがずっと楽になる。
  27. スタック追跡とパニック・ハンドリング (by Spiegel, ) #golang #panic #stack
    » panic 時の出力をカスタマイズすることを考える。スタック情報を取得するには, panic を recover で捕まえた上で runtime.Caller() 関数を使う。
  28. Travis CI でクロス・コンパイル (by Spiegel, ) #continuous-integration #cross-compile #github #golang #tools #travis-ci
    » 今回は Travis CI から GitHub へ mitchellh/gox で生成した実行バイナリを deploy することを考える。
  29. Interface の謎 (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)」である。 Instance の値ではなく実体を渡したいときにしたい場合はポインタを使う。
  32. Error の構造化 (by Spiegel, ) #error #golang
    » エラーハンドリングのために error を構造化する手段として github.com/pkg/errors というパッケージがあるそうだ。
  33. モンテカルロ法による円周率の推定(その1) (by Spiegel, ) #circle-ratio #golang #math #random
    » 乱数(random number)についていい例題がないかなぁ,と考えて「円周率をモンテカルロ法で求めるやつやればいいぢゃん」と思いついた。ので早速試してみる。
  34. モンテカルロ法による円周率の推定(その2 CLI) (by Spiegel, ) #circle-ratio #cli #facade #golang #init
    » さっそく推定結果について評価を行いたいところだが,その前に CLI (command-line interface) を整備する。今回は spf13/cobra パッケージを使うことにする。
  35. モンテカルロ法による円周率の推定(その3 Gaussian) (by Spiegel, ) #circle-ratio #gaussian #golang #math #random
    » さて,前回書いたコードを利用していよいよ円周率の推定結果を評価してみる。
  36. モンテカルロ法による円周率の推定(その4 PRNG) (by Spiegel, ) #circle-ratio #golang #math #random
    » math/rand パッケージでは rand.Source interface を持つ別の擬似乱数生成器を使うことができる。
  37. 1を1億回足して1億にならない場合 (by Spiegel, ) #golang #programming #type
    » 浮動小数点数型の変数をループカウンタにするのは止めましょうね。約束だよ!
  38. 演算子とステートメント (by Spiegel, ) #golang #language #programming
    » 今回は「つまみ食い」的に演算子(operator)とステートメント(statement)について解説する。
  39. 「プレミアムフライデー」を求めるパッケージを作ってみた (by Spiegel, ) #calendar #golang #programming #time
    » もちろん息抜きである。潤いは大事。でも実用性はないと思われ。
  40. 配列と Slice (by Spiegel, ) #golang #programming #slice
    » 配列と slice との関係について。あくまでも私のための覚え書きである。
  41. インスタンスの生成と Functional Options パターン (by Spiegel, ) #functional-options #golang #programming
    » 今回も自分用の覚え書きとして書いておく。
  42. ソートを使う (by Spiegel, ) #golang #programming #sort
    » ソートをアルゴリズムまで言及すると非常に深いテーマになるのだが,今回は標準の sort パッケージの使い方に絞って「こんな感じ」で説明していく。
  43. Go 1.9 と Type Alias (by Spiegel, ) #golang #language #programming #refactoring #type
    » なんで type alias なんて妙ちきりんな言語仕様が追加されたかというと,実はこれ,リファクタリングの為に設けられたのである。
  44. Gzip 操作について覚え書き (by Spiegel, ) #defer #golang #gzip
    » このようにインスタンスの生存期間を意識することで Go 言語の得意なパターンに嵌めることが容易になる。
  45. 最大公約数と関数型プログラミング (by Spiegel, ) #function #golang #greatest-common-divisor #math #programming #recursion
    » そうだ。最大公約数(greatest common divisor)の話をしよう。
  46. 指定桁の数字列の先頭をゼロで埋める遊び (by Spiegel, ) #cli #golang #programming #regexp
    » 今回は 文字列⇔数値 変換と正規表現(のさわり)について書けたからよしとするか。
  47. Glide から Dep への移行を検討する (by Spiegel, ) #dep #engineering #glide #golang #package #testing #tools #vendoring
    » つまり「依存関係(Vendoring)管理ツールとしては dep を推奨するけど移行できない人のために当面はサポートを続けるよ(でも将来は分からん)」という解釈でいいのだろうか。
  48. Go 言語における Singleton Pattern (by Spiegel, ) #golang #goroutine #init #programming #singleton #sync
    » はっきり言って「Singleton なめんな!」ですよ。
  49. Codic API を利用するパッケージを作ってみた (by Spiegel, ) #api #cli #curl #golang #language #package #programming
    » spf13/viper を使ってみたかったのだ。
  50. Hash 値を計算するパッケージを作ってみた (by Spiegel, ) #cryptography #golang #hash #programming
    » Windows で hash 値を計算するいい感じのツールがないので,もう自分で作っちゃったよ。といっても自前の部分は殆どないけどね。
  51. Travis CI でクロス・コンパイル(GoReleaser 編) (by Spiegel, ) #continuous-integration #cross-compile #github #golang #tools #travis-ci
    » クロス・コンパイルと GitHub への deploy をまとめてやってくれる GoReleaser というツールがあるらしい。
  52. Markdown 形式のリンクを生成するツールを作ってみた (by Spiegel, ) #golang #programming #tools
    » あれ? これ Go 言語でも簡単に作れるんじゃないかな。ちうわけで作ってみた。