Go
pkg.go.dev Go のファイルを text ファイルにアーカイブするコマンドが純正で用意されているということを教えてもらって初めて知りました。 以下のように使うと指定したディレクトリ配下の Go のファイルをすべて任意のファイル形式でにアーカイブ出力してく…
Go 1.23 から導入された range-over func を使うときの注意点として、range にわたす iterator 型のメソッドは nil を返してはいけない、というものがありました。 具体的には以下のコードで range-over func にアサインしてる NilFn は返り値が nil になる…
ということを知りませんでした。 // You can edit this code! // Click here and start typing. package main import ( "fmt" "slices" ) type X struct { ID int Name string } type xarr []X func main() { x := X{ ID: 1, Name: "taro", } xx := X{ ID: 2…
Overview タイトルのとおりです。 AWS SDK for Go V2 を使ってるケースで従来の Endpoint Resolver の実装方法が非推奨になり、新しい実装方法が公開されていました。 aws.github.io Endpoint Resolver とは? 文字通り AWS SDK 経由で AWS のサービスにアク…
Overview Go で文字列の中で特定の文字を別の文字に置換したいケース、例えば改行コードやタブが混じっている文字列の中で特殊文字だけをエスケープしたいケースなどで strings.Replace を多用するのではなく、一括で置換する実装について記載します。 strin…
Overview endpoint のテストをするときに httpserver でサーバーを立ち上げて request と response の検証をする、ということをするときに、httptest で立ち上げるサーバーに割り当てられる port はランダムに決まります。 ただ、テストによっては port を固…
概要 タイトルのとおりです。 Buf CLI を最新(v1.36) にしたところ、v1.32 以上で大きな変更があった模様で、それに対応しました。 buf.build zenn.dev 対応 github.com ハマったところ 新しい Mac で作業していたところ、Connect (依存含め)を動かすための…
Overview Go1.23 で range-over func を取り込んだ slices package 内の SortedFunc と SortedStableFunc の挙動について少し調べました。 SortedFunc SortedStableFunc Sort における Stable とは? Godoc を読んでも完全には理解できなかったので ChatGPT …
Overview Go1.23 から導入される Iterator を使って Chunk 処理を書く - emahiro/b.log を書いた当日(日本時間だと翌日だけど)Go 1.23 が正式にリリースされていたので、サンプルとして range-over func を使った高階関数のセットを書いてみた。 Go 1.23.…
Overview Sample Benchmark See Also Overview Go1.23 から導入される Iterator を使って同様に Chunk 処理を実装してみます。 Sample func chunk[T any](src []T, chunkSize int) iter.Seq[[]T] { return func(yeild func([]T) bool) { for i := 0; i < len…
Overview sync package 内にある semaphore を使って Go のアプリケーション側で goroutine の起動数を排他制御します。 Go の並行処理の起動数を制御するのは 使い方 https://pkg.go.dev/golang.org/x/sync/semaphore#section-documentation のサンプルにあ…
Overview 今月にもリリースされる予定の Go1.23 に同梱されている iterator package をだいぶ今更ながら触ってみました。 どういうものか、ということの概要は知っていましたが、まぁ一旦自分でも触ってみるか、ということで触ってみて、実際動かしながら触…
サマリ 現職で OpenAPI からのコード生成ツールとして ogen を採用して使っているのですが、この ogen がしばらく見ないうちに v1 (現時点の最新は v1.2.1) に進んでいたので、v1 以前との違い等々を調べてみました。 github.com v1 以前と変わったところ 設…
Go Conference 2024 に参加してきました。 個人としてはだいぶ久しぶりに大きなソフトウェアのカンファレンスに参加してきました。 コロナ禍でのオンライン開催での現地の熱気を感じれなくなったり、その後子供が生まれてそもそも週末に1人でなにかのイベン…
Overview Go + Delve の利用環境を VSCode について記載します。 動機 普段の開発ではずっと古き良き? print debug を使って動作確認を行ってきていました。 もちろん手元の開発だけでなく remote での動作確認等では今でもこれよりシンプルで一般的な手法…
Overview やること Query Operation の場合 ハマったところ BigQuery のライブラリでどの API を Call しているのかわからなかった。 BigQuery の API のレスポンスを生成する Overview BigQuery を使った実装をしているときに、API リクエストを mock した…
actions/setup-go は Go のバージョンを指定しないとデフォルトで Go1.20 が使われているっぽい挙動に出くわしたので Go のバージョンを指定する方法のメモ。 github.com 気づいたきっかけは local で使用してる Go のバージョンと CI (GitHub Actions 上)…
Overview Go で BigQuery のクライアントを実装する BigQuery のライブラリは 2種類ある BigQuery の型はそれぞれ Go で対応する形が決まっている カラム名とフィールド名は一致させる必要がある 余談: ValueLoader を実装すると独自型を BigQuery の型を pa…
Overview cmpopts.IgnoreMapEntries を利用する Ref Overview go-cmp を使って実際取得した値と期待値を比較するときに go-cmp/cmpopts を使って、二値の比較のオプションを設定することが出来ますが、この二値が map のときに map の中の特定の key に紐づ…
AWS の Go SDK はその本体のコードを読もうとすると実装がものすごく抽象化されていて、慣れていないと実際のコードを追いかけることも結構難しい。 Go の実装でエラーの中身(型)を見て処理を変えたいケースやそもそもどういうエラーを返すのかを知りたい…
Overview Motivation 実装パターンについて GET /user?id=1,2,3 のパターン GET /user?id=1&id=2&id=3&id=... のパターン GET /user?id[]=1&id[]=2&id[]=3&... のパターン RFC 3986 を見る まとめ Overview ID=1, ID=2,... のようにクエリパラメータで指定し…
Overview gonew とは? gonew を使う まとめ See Also Overview gonew コマンドを触ってみたので備忘録です。 go.dev gonew とは? 既存の Go のプロジェクトからコピペで作らずに、そのプロジェクトをテンプレートとして新規の Go プロジェクトを始める事が…
Overview Go でエラーハンドリングするときにどこでエラーが発生したのかわかるように StackTrace を取得して、エラーメッセージと一緒に出力したいケースがあると思いますが、Go でStackTrace を取得するのはひと手間かかります。 「Go スタックトレース」…
Overview どういうケースか? 結論: Clone してから Body に詰め直す まとめ Overview Go の http.Request を二度読み込みしたいケースでハマったのでその備忘録です。 どういうケースか? API を書いていると認証・認可等のAPI全体に関わる共通の前処理を m…
Overview 具体的な実装方法 パフォーマンスについて Overview ※ 過去何度か上げた内容のエントリの更新版です。 Go で Slice から重複してる要素を排除する unique の処理について実装方法でパフォーマンスが異なるのでこのエントリを書いています。 最近暇…
知らなかったので備忘録です。 Overview go-cmp を使用して DB の Insert のテストを記述するとき time.Now() を使ってしまうと生成したデータと比較対象のデータでレコードの作成時刻( created_at )で誤差レベルの Diff が生じてしまいます。 ※ 生成時刻…
Overview 大した話じゃないですが久しぶりに http を色々ゴニョゴニョするコードを書いていたら忘れていたので備忘録 Response Header を差し込む ※ サンプルは httptest の Server を立ち上げています。 // application/json を Response Header の Content…
Overview errors.Join について パフォーマンスについて Practice まとめ Overview Go 1.20 から errors パッケージに導入された errors.Join は複数のエラーを詰め込んでも詰め込んだエラーそれぞれを Unwrap して取り出せる。 fmt.Errorf でも複数のエラー…
Overview 何度も忘れるので備忘録。 きっとまた忘れて似たようなエントリを書く気もする。 Sample 独自エラーを errors.Is でハンドリングしたいときは以下のように Unwrap を実装する。 type sampleError struct { err error msg string } func (e *sampleE…
Overview タイトルの通りですが以下の Pull Request にて go.opencensus.io から go.opentelemetry.io に乗り換えたので、乗り換えた際に従来通り span と trace を取れるようにした内容についてまとめます。 github.com そもそも OpenTelemetry とは? new …