Go
GoでHTTPSサーバをシュッと書いて、curl --cacertで動作確認したら普通に動いたんだが、そういえばcurlはクライアント証明書送ってないんじゃないかって疑問が出てきた。 結論から言うと、サーバからクライアントへの証明書要求はオプションであって、Listen…
ふと気になった。 ローカル開発環境でMySQLに接続するときにはTCPかunix domain socketを使用していた。ここで、例えばAPIにアクセスするときにはさらにHTTPなどのプロトコルを使用することになるが、MySQLでは一体何のプロトコルを使用しているんだろうとい…
go vetコマンドはPrintfのようなメソッドに対してフォーマットで表示する変数の数とその引数の数が一致しない場合(以下参照)にチェックしてくれる。 fmt.Printf("%v, %v\n", "test") しかし、例えば標準logパッケージをラップするパッケージを作った際に、同…
背景 Structure and Interpretation of Computer Programs(SICP)を読んでいた。第4章でメタ循環評価機という話題が上がる。これはSchemeのインタープリタをSchemeで書くという、一見矛盾しているようなそんなものである。一旦、そのまま本を読み進めScheme…
GoのバイナリをデプロイするためにGitHub Enterprise(以下、GHE)のReleaseにアップロードしておいたバイナリをダウンロードするツールをGoで書いた話をする。 背景 複数の開発が並行していてGitHubのブランチと本番・ステージ環境が対応付けできなかったり、…
前にgmail APIを叩いた時にRFC2822について調べたが、絶対にフォーマットを忘れる自信があったので簡単なパッケージとしてまとめた。 特にメールのヘッダーに日本語を使いたい時のフォーマットなんて覚えて置ける自信がまるでなかったので。 ブログで記事と…
Go Quickstart | Gmail API | Google Developers 上記を参考にした。サンプルコードは最後に記載する。実装してる途中でメールの題名に日本語を設定できず、RFC2822について調べる必要があったのでメモしておく。 RFC2822 https://www.ietf.org/rfc/rfc2822.…
base64を自分の理解のために実装してみる。 手順はこちらの記事がわかりやすいです。RFCで読むならこちら。 実装したコードは以下の通りです。ほとんど標準パッケージ。 package main import ( "fmt" "os" ) const encodeStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZa…
helm-gtagsを使ってて、RubyとかPHP書いてたときにはうまくタグを作れてたんだけどGolangでうまく作れてなかった。以下の記事を見つけて試しにやってみたらうまくいった。 Using GNU GLOBAL · GitHub /usr/local/etc/gtags.confを上記の通り修正して以下のコ…
golangではそもそもpanicしないようにコードを書くべきだしpanicが発生するならここで発生するのだと把握した上でコードを書くべきだ、という認識はある。とはいえ、golang書き始めてまもないので「念のために」recoverをコードに書いておきたかった。 具体…
以前、ミドルウェアをうまく扱うパッケージとしてnegroniを紹介したが、改めてコードを読むとちゃんと理解できていなかったので自分で書き直してみる。車輪の再発明。GitHubに上げるまでもないのでここに残す。 GitHub - urfave/negroni: Idiomatic HTTP Mid…
deferで呼び出した関数でrecoverした場合にはpanicは発生しない。 https://play.golang.org/p/Z0oJ2I26wq8 package main import "fmt" func main() { defer recoverFunc() panic("Panic happens!") } func recoverFunc() { if err := recover(); err != nil …
前回の記事でgraceful shutdownをミニマムに実装した。その続きでgraceful restartをミニマムに標準パッケージのみで実装してみる。 takayukinakata.hatenablog.com 参考にしたのは以下のパッケージ。 github.com 実装 前回と同様、理解のために最低限の実装…
graceful shutdownの仕組みがわかってなかったので自分でミニマムに実装してみる。 コード量が小さく読みやすかったので以下のパッケージを参考にした。 github.com github.com 実装 自分でミニマムに実装したコードは以下の通り。アクティブな接続が返って…
前回記事を書いたがもう少し詳しく書く。 takayukinakata.hatenablog.com なぜGoでMiddlewareを書きたいのか 前回書き忘れていたところ。 おそらくだがフレームワークを使用している場合には、フレームワークがよろしくやってくれるので自分でMiddlewareをど…
Goのlogパッケージでやってるintをasciiにする変換処理が何やってるか最初わけわかんなかったけど、多少理解できたからメモしておく。対象のコードは以下の通り。標準で年月日をログの先頭に付与できる機能(2009/01/23 01:23:23 log-messageみたいな感じ)が…
そもそもMiddlewareとは何かと言うと、私の認識ではアプリケーションの処理の前後で何らかの処理を行ったりするもの。例えば、ログを追加したりリクエストのAPIキーを認証したりする。以下の図がわかりやすい。 Laravel 5.0 - Middleware (Filter-style) | M…