しばたです。 前の記事でAWS SDK for Go v2を使ったツールを作った話をしましたが、このツールのテストを書くにあたり結構ハマったので共有したいと思います。 Developer Guide AWS SDK for Go v2のAPIをモックする方法自体は以下のDeveloper Guideにふつうに載っています。 後から改めて見る分には「せやな。」って感じで理解できるのですが、最初にこのドキュメントを見た際は 私のGo言語に対する理解が不足していた *1 AWS SDK for Go v1とv2でやり方が微妙に異なり、ネット上には両バージョンの手法が混在するため情報の取捨選択に手間取った という状態でかなり混乱し理解に手間取りました。 モックに必要なことを一つ一つ整理していけばそこまで難いことは無かったと今では思いますが、もう少し丁寧な説明があっても良いのかなと思うところでありま
こんにちは。カヤックボンドの松本です。 この記事は 面白法人グループ Advent Calendar 2022 の5日目の記事です。 この枠ではテストフレームワークについての話をしようと思います。 きっかけ あるプロジェクトのテストコードを見ていたら、こんな感じのテストコードを書かれていました。 func Test_Sample(t *testing.T) { ctx, usecase, user, err := initTest() if err != nil { t.Fatal(err) } tests := []struct { name string request *GetSelfRequest wantResponse *GetSelfResponse wantErr error }{ { name: "success", request: &GetSelfRequest{},
はじめに GoでCLIをよく作る身として、 どのように素晴らしいリリースフローを構築するか に心を砕いています。 2019年末にリリースされたGitHub Actionsがすっかり成熟し、GitHub Container Repository(β)もお目見えとなった2020年も暮れを迎えたところで、新たなリリースフロー構築を検討し、一定の結論を得ましたので、少しでもGophersのたすけになることを願って、記事として公開します。 背景 実現したい「リリース」 クロスコンパイルしたバイナリでの配布 Goでツールを作ることで、クロスコンパイルの手軽さによって、様々な環境で、ダウンロードすればすぐに実行できるバイナリでの配布が可能です。 $ curl -O bin.tar.gz https://github.com/kyoh86/gogh/releases/download/v1.7.1/gog
はじめにTechnogoly Innovation Group 辻です。Go には Gorm や SQLBoiler をはじめとして様々な ORM があります。2021 年には当社のブログで OR マッパーの連載を行ったこともありました。絶対的な ORM があるわけではなく、業務システムの特性やチーム構成などに合わせて ORM を選択することになるでしょう。 今回、私たちのチームでは、バッチ処理が中心的な業務システム開発において Go の ORM に sqlc を採用しました。素の SQL を書いていくチームの開発方針1とマッチし、開発体験は非常に良かったです。一方、枯れきってはいない ORM ではあります。いくつか想定外の挙動が発生し GitHub の Issue を見ながら問題を切り分けることもありました。 これから sqlc を導入してみようかな、と考えている方々の参考になればと思い
よく見るDB接続例 Go言語を用いてmysqlに接続する際、DBの情報を文字列で直書きしているケースを良くみる import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main(){ db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/db?charset=utf8&parseTime=true") // 以下省略 } import ( "database/sql" "time" "github.com/go-sql-driver/mysql" ) func connectDB() *sql.DB { jst, err := time.LoadLocation("Asia/Tokyo") if err != nil { // エラーハンドリ
この記事で取り扱っているGoのお作法について解釈が間違っていると指摘をいただきました。 詳細はこちらをご覧ください。 Go言語には"Accept interfaces, return structs"というお作法がある。 このお作法の存在に気づいていなかったし、そうでなくても正しく動いてくれていた。 Goを3年ほど書いてきてようやくお作法を理解したので紹介したい。 これまでのぼくの書き方 以下にこれまでぼくが書いていたコードのinterface定義の例とその実装の例を示す。 Example structはExample interfaceの定義を満たしており、DoSomething関数を持つ。 interfaceのありがたみはinterfaceさえ参照すれば、それを満たすstructがどんな関数を持っているのか知ることができる点だとばかり思っていた。 interfaceを引数に取る関数に依
上の2つがCLIで、下の2つがブラウザです。歴史的な経緯を見てみましょう。 〜1.1: go docはバンドルされているツールで、ソースもgo本体に同梱 1.2: go docは別のリポジトリにわけられてgodocになり、go本体から外れた 1.3: godocで-analysisオプションが追加 1.5: 新しい"go doc"コマンドがgo本体に同梱 1.11: godocがウェブだけになるため、go docを使えというアナウンスが出るように 1.12: godocが-httpだけをサポートしてCLIの機能は削除予定 1.13: godocのwebサーバーが同梱されなくなって手動でのインストールが必要に 1.13~: 既存のgodoc.orgから、go modのプロキシサーバーの情報をもとにドキュメントをホスティングするpkg.go.devが運用開始 わかりましたか?よくわかりませんよ
近年、普段の作業をマウスでやりたくない気持ちが高まっている(デスク周りが散らかってきたせいだという説が有力です)。メールは結局ターミナルでメールを読むことにしたため問題なく過ごせているが、その他のタスクをキーボードだけでやるには、ターミナル動くアプリケーションを作れる必要がある。それもリッチなやつだ。見た目は派手な方がいい。 この記事は Kyoto.go remote #32 LT会 で発表した 入門 Bubble Tea の増補版です。 Bubble Tea とは GitHub - charmbracelet/bubbletea: A powerful little TUI framework 🏗 Bubble Tea とは、Go でリッチなターミナルアプリケーション(TUI)を作るためのフレームワーク。Charm というプロジェクトの一部のようで、ホームページを見てもらったら分かると
筆者はTypeScript型チェッカーtscをRustではなく、Goに移植しようと思います。拡張可能なRustプラットフォームSWCの作者の発言としては、奇妙に聞こえるかもしれません。理由を説明したいと思います。 なぜtscを移植するのか TypeScriptの普及が進むにつれて、大規模プロジェクトではあるジレンマに直面しています。型チェックは、ワークフローの中で最も時間がかかるプロセスの一つになっているのです。開発者は、イテレーションのサイクルを遅らせることなく、型安全を保証することを望んでいます。 tsc(TypeScript Compiler)は、型の妥当性をチェックし、コードをJavaScriptにコンパイルします。コードの量が多いほど、コンパイルには時間がかかります。中規模から大規模のTypeScriptプロジェクトでは、このコンパイルに膨大な時間がかかります。開発者はワークフロ
OAuth2 のよくあるフローを何回も書きたくない #Go - 詩と創作・思索のひろば golang.org/x みたいに、独立させるまでもないけど再利用したいパッケージを go-nuts レポジトリにまとめるのいいな。真似しようかな(名前もかわいい)2022/06/06 12:04 golang.org/x みたいに、独立させるまでもないけど再利用したいパッケージを go-nuts レポジトリにまとめるのいいな。真似しようかな(名前もかわいい) - ono_matope のブックマーク / はてなブックマーク そうなんです! Go は中央的なパッケージリポジトリがないので、新しいパッケージを作る心理的コストは他の言語に較べてかなり低い。とはいえ GitHub にリポジトリを増やすのも、CI 周りだとか、バージョニングであるとか、脳内ネームスペースの管理だとかで負担がゼロなわけではない。そ
こんにちは。生産プラットフォーム開発部の中嶋です。生産プラットフォーム開発部はアパレル生産のDXを進めている部門です。具体的には服作りのIT化を含めたアパレル生産の効率化の促進と「生産支援」のシステムを主にGoで開発しています。今回はその運用の中でGoプログラムの実行時間をどのように短縮したのかを紹介します。 目次 目次 学べること・解決できること 背景 エラー発生 調査・対応 インスタンスの変更 原因 実装アプローチの見直し ゴルーチンを使ったタイムアウト処理 サンプルコード チャネルのクローズについて Goのメモリマネジメントについて スタックとヒープ ゴルーチンとメモリについて ヒープについて 問題の仮説 どのように解決したか 実装イメージ 利用したパッケージ サンプルコード 結果 まとめ 最後に 参考リンク 学べること・解決できること Goのメモリエラーに対するアプローチ例 Go視
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは。Yahoo!広告 ディスプレイ広告エンジニアの小杉です。 アプリへの広告配信を行うシステムの開発を担当しています。 昨年、数万 QPS のリクエストを受けるレガシーなアプリ用 SSP(Supply Side Platform)サーバーを Go に言語刷新し、 障害件数 0件で完了できました。 この記事では、これほど大規模なシステムリニューアルを無事故で完遂するためには、 どのような点に注意しプロジェクトを進行したのかご紹介します。 なぜ言語を刷新したのか このシステムは旧来 PHP で作られていましたが、それを今回 Go 言語に置き換えました。 ヤフーでは、レガシーなシステムをモダン化して開発しやすい環境を作ることに取
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く