Go

Go 1.21 に入る予定の log/slog パッケージの話

Go

ログ出力をどうするかっていうのは、Go 書くときに常にちょっとした悩みの種でした。 標準の log パッケージはあるものの、実用には機能が不足していると見なす人が多いためです。 かくいう私もその一人で、近年は Kubernetes 界隈でよく使われている以下を…

HTTP 100 Continue in Go

Go

使おうとするたびに忘れて調べなおすのでメモ。 HTTP のレスポンスコード 100 は、クライアントが大きなデータを送る前に送信ヘッダレベルで リクエストの受付が可能か調べて、処理可能ならいったん返すためにある。 用途例: Authorization ヘッダによる認…

kubebuilder v2 で webhook 開発

仕事で、データセンターのアーキテクチャを刷新するプロジェクトを進めてます。 Kubernetes を中心としているので、必然的に Kubernetes 上で動作するアプリケーションを開発する機会があります。 Kubernetes は API サーバー (kube-apiserver) にリソースを…

code-server で実現する Windows 上で Linux 向けの快適な Go 開発環境

業務で Linux 向けの Go プログラムを多数開発しています。 しかしながら、開発している機材の OS は好きこのんで Windows です。 在宅から勤務するときに、Windows のリモートデスクトップが最強すぎるので手放せないのが大きな理由です。 そんなわけで、Wi…

Go で GitHub v4 GraphQL API を使って draft pull request を自動作成

先日 GitHub に「開発中のためまだマージするべきでない」プルリクエストを作ることができる Draft Pull Request 機能が追加されました。 今の業務では複数人でモブプロしたりする関係で、開発途中のブランチを GitHub に push してひとまずプルリクエストを…

WSL で快適な Go 開発環境を作る

Go

個人的な備忘録です。 仕事上 Ubuntu をターゲットに Go のプログラム開発をする必要があるのですが、従前 Windows デスクトップに Hyper-V の Ubuntu で Emacs で開発していたところをVisual Studio Code(vscode) に開発環境を変えたいと考えました。理由は…

golang.org/x/crypto/ssh で固まらないようにする

Go

最近 CKE というベアメタル向けの Kubernetes 管理ツールを作っています。 ブートストラップツールではなく自律的・継続的にクラスタの構成を修正していくツールで、以下が特徴です。 ネットワークプラグイン非依存 HA 対応 CKE 自体の高可用性 今日は CKE …

http.Response を返すような関数は作らないのが賢明

go Go

Go 1.7 から本体に入った context パッケージは便利、というより今や必須の道具です。以下のように書くことで、一定時間で処理をキャンセルできたりします。 func slowOperationWithTimeout(ctx context.Context) (Result, error) { ctx, cancel := context.…

「みんなの Go 言語」は忙しいプログラマこそ読むべき本

@songmu 氏からご恵贈いただいた「みんなの Go 言語」(みんGo)、早速拝読しました。 書評としてはタイトル通り、なのですがそれではあんまりなのでもう少し。 本書でも述べられている通り、Go 言語は早ければ一日で大体学べてしまう学習効率の良さが魅力で…

Go のポインタメソッドとバリューメソッドのどちらが良いのか

Go

TL; DR ほとんどの場合ポインタメソッドにしておけば良い。 Go のメソッドは、レシーバーとして値(value)を受け取るかポインタを受け取るか選択できます。

手軽に Go スクリプトを実行する

Go

Linux 限定ですが、binfmt_misc を使えば shell script や Python と同じように実行ビットを立てるだけで実行できるようになります。 以下のスクリプトを /usr/local/bin/gorun とでもして保存 #!/bin/sh exec go run "$@" Debian/Ubuntu なら update-binfmt…