はじめに 鍵を閉め忘れたような気がして心配になるように、リソースを後始末していたか心配になることはありませんか。 「習慣的にdeferでCloseしてるからリークしないはずたけど。あれ?トランザクションはしてなかったかも。ん?Closeないの!?」 Goの標準ライブラリの database/sql で中心となる sql.DB ではデフォルトでコネクションプールが使われるようになっていて明示的な操作は不要です。 ではいったい、どのタイミングでプールに返却されているのか、パターンを整理してみました。 準備 挙動の確認でINSERTやSELECTを実行するため、PostgreSQLに簡易なテーブルを作成しました。 CREATE TABLE shop ( id serial PRIMARY KEY, name text NOT NULL, created_at timestamp with tim
2024-08-28 GOTOOLCHAIN=auto時にはtoolchainディレクティブに指定したものより新しいGoがインストールされていても戻るわけではないという話を追記しました。 Go言語では半年に1回メジャーリリース(マイナーバージョンの更新)がやってきます。ちょうどこの8月にGo 1.23がリリースされたばかりです。Go言語のメジャーリリースは最新2つ分までサポートされるポリシーであることがhttps://go.dev/doc/devel/releaseに書かれています。現在であればGo 1.23やGo 1.22はサポートされており、Go 1.21はサポートが切れているということです。 また、サポートされているバージョンでは、不定期でマイナーリリース(パッチバージョンの更新)がやってきます。バグ修正や脆弱性対応がメインですね。 Goがリリースされると、Goでアプリケーションを作
はじめに Goで自作RDBMSに挑戦してみたログです。自作、といっても大部分は参考にした書籍の移植です。 ここ1年くらいRDBに向き合う機会が多く、その内部実装を手を動かしながら身を持って理解してみたいというモチベーションから始めてみました。ちょうど会社の『内部構造から学ぶPostgreSQL』読書会に参加したこともモチベーション上げるきっかけとなりました。 (他の方の記事ですが、読書会の記録はこちら↓) 『内部構造から学ぶPostgreSQL』読書会を完走した感想 [改訂3版]内部構造から学ぶPostgreSQLの社内読書会振り返り データベースをデータの箱としか思っていなかった私の『内部構造から学ぶPostgreSQL』を読んだ感想 普段何気なく使ってるRDBMSですが、ACID特性を守るため・大量の読み書きを捌くため、非常に緻密に設計されております。 これを完全再現といかなくとも自分
こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 golangでずっと課題に思っていたエラーの処理について試行錯誤してみました。 イオンモール センソックシティは、カンボジアにある商業施設。本文には関係ありません。 エラー処理のベストプラクティスは? ぼくがかんがえるエラー処理の要件 検討したパッケージ 構造化ログ パッケージの検討 pkg/errors cockroachdb/errors goark/errs go-errors/errors go-errors/errors がよさそう? pkg/errors や cockroachdb/errors は使えないのか ラップして使う errors.WithStack(err) と呼びたい slogで使う errors.Join() に対応したい まとめ We are hiring! エラー処理のベス
NEWT Backend (GraphQL) の自動テストの現状とこれから ~ 2年間の開発・運用で遭遇した課題と工夫、今後の課題 ~
この記事はfreee Developers Advent Calendar 2023の21日目の記事です。 こんにちは、金融開発部でEMをしている ogugu です。 今回は、Go言語において Feature Toggle の分岐を掃除するCLIを作ったので、ご紹介します。 ※ 毎年恒例の開発合宿 での成果になります。 Feature Toggle とは Feature Toggle とは、特定機能の有効・無効をフラグによって切り替える方法です。 金融開発部では、以下のように Feature Toggle を実現できるライブラリを用意しています。 if featflg.Enabled(ctx, "feature_name") { doNewLogic() } else { doOldLogic() } 一般に、フラグ設定は、設定ファイル・環境変数・ストレージなどから読み出し、それらに対する
はじめに ファイルをアップロードすることができる機能を持ったWebアプリケーションやクラウドサービスは世の中に多数あります。しかし、アップロードしたzipファイルを自動で展開(解凍)してくれて、中身のファイルが閲覧できる機能を持ったサービスは、あまり多くはないかもしれません。 もし、Google Cloud上で、zipファイルをアップロードし自動的に展開してGCSに配置するシステムを作るとしたら、どうやって実現すればよいでしょうか。たとえ100GBのzipファイルでも問題なく展開できるようにするには? そんな難題に挑み、GCSにアップロードされた100GB級のzip/7zファイルを自動的に展開することができるシステムをGoで実装し、プロダクションレベルで実現しました。その技術について解説します。 背景 PLATEAU VIEWの画面 Eukaryaでは、国土交通省が主導しているProjec
イテレータについて完全理解するぞ!!!! 皆さん、Go1.23で導入予定のイテレータすごい楽しみですよね? 筆者はすごい楽しみです。Go1.18でジェネリクスが導入されて書き方の幅が広がったように、今回のイテレータもGoの書き方の幅を広げる機能になるのではと予想しております! https://github.com/golang/go/issues/61405 を見ると分かるように「add range over int, range over func」の機能はGo1.23のマイルストーンに積まれています。 「range over int」の機能についてはGo1.22で既に実装されています[1] 。「range over func」は来たるGo1.23に実装予定だと思われます。このブログでは、導入予定の型/関数とその使い方を深ぼっていきたいと思います! このブログの中では「range ove
はじめに こんにちは。都内でソフトウェアエンジニアをしているtomoriです。 突然ですが、Go言語でHTTPサーバーを実装する際、サーバーの終了処理を適切に実装できている自信はありますか? 自分が開発に携わっているプロダクトでは、ほんの最近まで下記のような不適切な終了処理を行なっていました(話を簡単にするためにここでは panic を使っています)。 err := http.ListenAndServe(":8080", handler) if err != nil { panic(err) } HTTPサーバー実装のサンプルとかでよく見るやつですね。 これだとアプリケーション側で、いわゆる Graceful Shutdown ができておらず、実行環境にて不具合を引き起こす恐れがあります。 というわけで、最近それを修正したのでアウトプットとして記事にします。 Go言語でHTTPサーバーを
お久しぶりです、ANDPADボードの tomtwinkle です。 この記事はGoの go:linkname 騒動は 6/18に行われた Go Bash で話した内容を要約したものです。 そもそも go:linkname とは何かといえば internal packageやprivate var/funcなど普通はアクセスできないオブジェクトシンボルをエイリアス出来るようCompilerに指示して、アクセス可能にするcompiler directiveです。 go:linkname はprivateな変数へアクセス可能な便利なものでしたが unsafe packageのimportを必須とする通り、せっかく互換性や安全を考慮して作られているGoプログラムを簡単に破壊できる諸刃の剣でした。 詳細は発表スライドを見てください。 go:linkname 禁止騒動 Go 1.23 のリリースまで2
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く