Goに関するmom0tomoのブックマーク (64)

  • Gopherくん(再)入門|kogu

    Gopherくん」は、プログラミング言語Goの公式マスコットキャラクターで、これはGopherくんのちょっと長い紹介記事です。 2016年に『Gopherくん入門』という記事を書いたのですが、当時配信に使っていたGoogle App Engineの料金体系の変化などから、公開を停止したままになっていました。 noteに慣れてきたので、ご要望をいただいていたこの記事を加筆修正し、(再)入門として公開します。リンクや紹介の見直しと表現の修正などを行い、現在のGopherくんの状況への言及を追加ました。 なお、この記事にはCC0 1.0 ライセンスを適用します。記事体については、あらゆる利用が許可なく行えます。引用部分、Twitterの埋め込み、ライセンス表記のある画像などは、それぞれの使用条件に準じてください。 お問い合わせやご依頼は、TwitterのDMまでお願いします。 はじめにGo

    Gopherくん(再)入門|kogu
    mom0tomo
    mom0tomo 2024/03/13
    Gopherくん入門、復活してた!
  • Goリリースノートから技術ブログを書く流れ基礎 | フューチャー技術ブログ

    The Gopher character is based on the Go mascot designed by Renée French はじめにTIG真野です。 フューチャーでは2021年の2月に公開されたGo 1.16から、Goのリリースノートを読んで気になったところをブログにまとめるというブログリレーを続けています。 Go 1.16連載が始まりますGo 1.17連載が始まります: コンパイラとgo modGo 1.18集中連載 ジェネリクスGo 1.19リリース連載始まります GoDoc/ツール周りのアップデートGo 1.20リリース連載が始まります&メモリアリーナの紹介&落ち穂拾いGo 1.21連載始まります&slogをどう使うべきかGo 1.22リリース連載始まります & ループの変化とTinyGo 0.31単なる翻訳ではなく自分たちならではの付加価値を提供するための執筆の

    Goリリースノートから技術ブログを書く流れ基礎 | フューチャー技術ブログ
    mom0tomo
    mom0tomo 2024/03/07
  • Go testにおける可読性を保つ方法を考える - every Tech Blog

    はじめに TIMELINE開発部の内原です。 日はGo言語のテストにおける可読性について考えてみます。この記事を読んでいただいている皆さんにも、テストを書いていて以下のような問題を感じた経験があるのではないでしょうか。 既存のコードに機能追加をするためテストコードにもテストケースを追加しようとしたが、テストコードが複雑で読み解きづらく、テストを追加するのに苦労した テストケースの種類が多く、少しデータを追加しただけでも既存のテストが動かなくなる テストデータの登録方法が複雑で、テストコードの実装以前に手間取る 上記のような問題に対処するべく、実践的なシナリオに従ってGo言語のテストコードを実際に書きつつ都度改善していくことにします。 仕様(ver.1) ユーザ情報には名前、状態(有効、無効)とがある 有効なユーザ一覧を返却する関数 LoadActive() を実装する。その際並び順はID

    Go testにおける可読性を保つ方法を考える - every Tech Blog
  • 速習Go/Fast Learning Go

    2024/02/07に行われた、OCHaCafe Season8 #1 - 速習Goで用いた資料です。 commpass: https://ochacafe.connpass.com/event/307167/

    速習Go/Fast Learning Go
    mom0tomo
    mom0tomo 2024/02/09
    網羅的でわかりやすくいい資料
  • Go1.22 リリース連載 HTTPルーティングの強化 | フューチャー技術ブログ

    はじめにGo1.22リリース連載 の5目です。 記事ではGoの標準ライブラリである net/http の ServeMux におけるルーティング周りの強化について取り上げます。 関連する Release Note と Issue はこちらを参照してください。 https://tip.golang.org/doc/go1.22#enhanced_routing_patterns https://github.com/golang/go/issues/61410 変更点HTTPメソッドの指定が可能にServeMux.Handle や ServeMux.HandleFunc を使用してハンドラを登録する際に GET /xxx のようにHTTPメソッド指定して、ハンドラを呼び分けることができるようになりました。 mux := http.NewServeMux() // GETを指定したハンドラ

    Go1.22 リリース連載 HTTPルーティングの強化 | フューチャー技術ブログ
    mom0tomo
    mom0tomo 2024/02/02
  • リンカを変えてgo buildを 速く出来るか

    hatena.go 5分LTの発表資料 https://hatena.connpass.com/event/307931/

    リンカを変えてgo buildを 速く出来るか
    mom0tomo
    mom0tomo 2024/02/02
  • Go 1.22リリース連載始まります & ループの変化とTinyGo 0.31 | フューチャー技術ブログ

    Go 1.22のトピックとしては以下のようなものがあります。だいぶ安定版になってきたからか、言語もライブラリもこつぶなものが多くなってきたかな、という印象です。 ループ変数の挙動の変化 ツール系 GO111MODULE=offオプションの廃止 トレースツールのUI改善 net/httpのServeMuxでパス変数が扱えるように go vet強化 コンパイラでGCが1-3%高速化。PGOで2-14%改善 リンカーの生成するバイナリがよりデバッガフレンドリーに ライブラリ math/rand/v2追加 database/sql.NUllの追加 net/httpのルーターがパスパラメータをとれるように その他 個人的に注目しているHTTP/3やQUICへの対応は、準標準ライブラリのgolang.org/x/net/internal/quicの中で進行中。将来的にはinternalが外れたgola

    Go 1.22リリース連載始まります & ループの変化とTinyGo 0.31 | フューチャー技術ブログ
    mom0tomo
    mom0tomo 2024/01/30
  • Japanese Version - 100 Go Mistakes and How to Avoid Them

    Go Mistakes Book Details Go言語でありがちな間違い このページは『100 Go Mistakes』の内容をまとめたものです。一方で、コミュニティに開かれたページでもあります。「ありがちな間違い」が新たに追加されるべきだとお考えでしたら community mistake issue を作成してください。 Jobs Is your company hiring? Sponsor the Japanese version of this repository and let a significant audience of Go developers (~1k unique visitors per week) know about your opportunities in this section. 注意 現在、大幅に多くのコンテンツを追加して強化している新しい

    Japanese Version - 100 Go Mistakes and How to Avoid Them
    mom0tomo
    mom0tomo 2024/01/30
  • もっと log/slog を使おう

    はじめに この記事は Go アドベントカレンダー 2023 の最終日 25 日目の記事です。 皆さん log/slog 使ってますか。便利なのでぜひ使ってください。 slog は構造化ログを出力する為のパッケージで Go 1.21 で導入されました。これまでも zap や zerolog といったサードパーティ製のロガーを使う事で構造化ログを出力する事ができましたが、構造化ログを出力する機能が Go の標準ライブラリになりました。 slog とは 通常の log パッケージは、時刻とメッセージの単純な出力になります。

    もっと log/slog を使おう
  • 強い思想: Go を Web 開発に採用する上で

    Go は Web 開発に向いているか? 最も向いている領域は「CLI ツール」「ミドルウェア」「マイクロサービス」だと思っている。なぜならそれらはコードベースを比較的小さく抑えることを前提としているからだ。 Go は大きなコードベースを抱えやすい設計の言語になっていない。 ミドルウェアとマイクロサービスに関しては小さく作ることが正義。 CLI ツールに関しては単一責務なツールであれば小さくなるが,複数を束ねるツールであっても Web サービス開発に比べれば考えることは少なくて済む。 Web 業界における「一般的な Web 開発」,すなわちモノリスを基とした中規模以上の開発にははっきりと 向いていない と言うべきだろう。 フラットパッケージは正義か? 私が SNS で何度か言及した以下の記事がある。 フラットパッケージ戦略は,確かに Go文化圏においては一定の支持を集めている。Go

    強い思想: Go を Web 開発に採用する上で
    mom0tomo
    mom0tomo 2023/09/10
  • structのメモリ割り当て - Carpe Diem

    概要 Goにおけるstructのメモリ構造を知ることでフィールド順序に対する意識が変わったり、なぜunsafe.Sizeof(string)が16bytesでunsafe.Sizeof(slice)が24bytesになるかが理解できます。 環境 Go 1.15.6 darwin 20.1.0 x86_64 各型のメモリ割り当て unsafe.Sizeof()を使うとその変数がどれくらいメモリを割り振るかが分かります。 ※変数の分確保するメモリであり、参照先のメモリは含みません 型 unsafe.Sizeof() bool 1 int32 4 int 8 float64 8 string 16 []T 24 The Go Playground structのフィールドにそれぞれの型を付けると、その分メモリが割り振られます structのメモリ割り当て 例えばbool, float64, in

    structのメモリ割り当て - Carpe Diem
    mom0tomo
    mom0tomo 2023/09/08
  • テストでしか使わないパッケージをgo.modに含めない方法 - Copy/Cut/Paste/Hatena

    元エントリは↓で、これが全てです。 dev.to 最高じゃんhttps://t.co/c1hfSYhgx2— k1LoW (@k1LoW) 2023年8月26日 Goでツールではなくライブラリ(パッケージ)を作っているとき、テストにしか使わないパッケージがgo.modに入って依存関係ができてしまうのが、いつも気になっていました。 ただ、「まあ別にいいかな」と思っていたのですが、ちょうど標準パッケージだけで機能が実現できるパッケージができたので、どうしてもgo.modを綺麗にしたくなりました。 そして、えいっと調べてみたらすぐに解決方法が見つかったのでした。 テストでしか使わないパッケージをgo.modに含めない方法 方法は次の通りです*1。 テスト用に go_test.mod ファイルを用意して -modfile オプションを使って go_test.mod ファイルを指定して go tes

    テストでしか使わないパッケージをgo.modに含めない方法 - Copy/Cut/Paste/Hatena
    mom0tomo
    mom0tomo 2023/09/04
  • Go 1.21連載始まります&slogをどう使うべきか | フューチャー技術ブログ

    Go 1.21は久々の新しいライブラリが大量追加だったり、既存のパッケージへの改良の多数行われたり、あたらしい組み込み巻数が追加されたりで記事などが書きやすいリリースです。残念ながら、フューチャーで一番Goを使っているプロジェクトが山場で今回はちょっと書き手が少ないのですが、今回もお付き合いいただけるとうれしいです。 1.21の更新内容のまとめダイジェスト 1.18の時に入るといって直前にキャンセルになった、ジェネリクスのためのパッケージslices/mapsの復活 新しい組み込み巻数のmin/max/clearの追加 言語仕様の強化 パッケージの初期化順序が仕様化 型推論ちょっぴり強力に 次期バージョンで入る予定のループ変数が共有されちゃうバグ対策が実験実装 ランタイムの性能改善(いつもの) 深いスタックオーバーフロー時のトレースが見やすく(最新100ではなく、最新50と一番外側の50表

    Go 1.21連載始まります&slogをどう使うべきか | フューチャー技術ブログ
    mom0tomo
    mom0tomo 2023/08/02
  • Goコンパイラのお勉強(1) ~ゼロ幅の型によるメモリ利用の最適化と未定義動作 ~ - Techtouch Developers Blog

    はじめに メモリアロケーションの回避 ゼロ幅の型(=ゼロサイズの型)とは アドレスの同一性に関する未定義動作 この最適化が有効な場面 1. map 2. chan 3. interface の実装 おわりに 参考文献 はじめに こんにちは。SRE の izzii です。 最近は某フィットネスゲームが習慣だったり、ボルダリングを再開したり、登山シーズンが到来したりと心身ともに調子が良いです。 さてつい先日、Go のコンパイラによる最適化について勉強したまとめを社内で共有したところ、メンバーが面白がってくれたため、細かいところを自分の手で触ってみたり、Go Forum で質問を投稿したりした上で記事にしてみました。Go コンパイラの最適化について知りたいという方だけでなく、Go に慣れた方でも意外と知らない挙動を垣間見ることのできる内容かと思います。 github.com を元にしているのです

    Goコンパイラのお勉強(1) ~ゼロ幅の型によるメモリ利用の最適化と未定義動作 ~ - Techtouch Developers Blog
    mom0tomo
    mom0tomo 2023/07/13
  • 🪵 Go1.21 log/slogパッケージ超入門

    はじめに 2023年8月9日(日の場合)Go1.21がリリースされました🎉。Go1.21ではさまざまな変更点や追加機能が加わります。その中でもGo標準ライブラリに導入される構造化ロギングパッケージlog/slog(以下、slog)を楽しみにしている方は多いのではないでしょうか? 稿では、slogを実際に触りつつ、機能の解説をしていきます。 TL;DR 稿の概要をスライドにもまとめているので、ご参考にして下さい。 従来のlogパッケージについて slogの説明に入る前に、Go標準のlogパッケージについて簡単に紹介する。logパッケージを用いると、 io.Writer インターフェースを実装する任意の型にログメッセージを書き込むことができる。しかし以下のような制限があった。 ログレベルをサポートしていない ログレベルはほとんどのログパッケージの定番機能の一つだが、logパッケージには

    🪵 Go1.21 log/slogパッケージ超入門
    mom0tomo
    mom0tomo 2023/07/02
  • 次なる`pkg/errors`を探して - カンムテックブログ

    エンジニアの宮原です。 今回はGoでスタックトレースを取得するライブラリ選定についての記事です。 この記事は 【Gophers Talk】スポンサー4社による合同LT & カンファレンス感想戦で発表したものです。 発表スライドはこちらから確認できます。 この記事の目的 この記事ではpkg/errorsからの移行先を探すための参考情報を提供することを目的とします。 Goのエラーハンドリングのやり方等についてこの記事では触れないこととします。 pkg/errors とはなにか pkg/errorsとは、githubのREADMEを引用すると Package errors provides simple error handling primitives. とあり、直訳すると、「エラーハンドリングの基礎を提供するパッケージ」となります。 pkg/errorsを利用することで、Go体にはないスタ

    次なる`pkg/errors`を探して - カンムテックブログ
    mom0tomo
    mom0tomo 2023/06/19
  • Goが循環インポートをエラーにする理由

    循環インポートの問題点 現代のプログラミング言語の多くは1パスでプログラムコードを解釈します。インタプリタ型は当然としてC/C++も例外ではありません。つまり「コンパイル・実行」されるまでにソースコードを2度パースすることはありません。 さらにプログラム言語の多くは多重定義はバグの元なのでエラー扱いになります。なので対策の無いヘッダーファイルをincludeした時、再度同じヘッダーファイルが参照された場合に「多重定義」になってしまいます。 C/C++ではそのような「多重定義」を回避するために「インクルードガード」という対策をヘッダーファイルに施します。C/C++ではプリプロセッサという仕掛けに依存していてコンパイラは重複する定義がそれぞれどこのファイルを読み込んだ結果かを判別できません。なので「インクルードガード」という対策がヘッダーに必要なのです。 しかし、「インクルードガード」は方針が

    Goが循環インポートをエラーにする理由
    mom0tomo
    mom0tomo 2023/06/14
  • Go の sql.DB がコネクションプールを管理する仕組み

    Godatabase/sql パッケージ の DB 構造体 は、データベースへのコネクションプールを管理し、かつスレッドセーフ (goroutine セーフと言ったほうが良いのだろうか…?) にそれらの接続を使用できることを保証している。 ドキュメント にも次のように書かれている。 DB is a database handle representing a pool of zero or more underlying connections. It’s safe for concurrent use by multiple goroutines. こちらの基的な実装内容と、動作を制御するパラメータについて調べてみた。 基礎知識のおさらい database/sql パッケージはデータストアの実装によらない一般的な SQL のインタフェースを提供している。具体的なデータストアへの接

    Go の sql.DB がコネクションプールを管理する仕組み
    mom0tomo
    mom0tomo 2023/06/11
  • Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました - Mirrativ Tech Blog

    こんにちは ハタ です。 このたび Go Conference 2023 Online にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルで発表しました 久しぶりの大きなカンファレンスでの登壇だったのでとても緊張しましたが、10周年を迎えた機会に登壇できて光栄です gocon.jp 今回発表した資料はこちらになります、当日のアーカイブは近々公開されると思いますのでお待ち下さい speakerdeck.com (2023/06/28追記) アーカイブ公開されたようです! もし当日ご覧になれなかった方はこちらからご視聴ください! zenn.dev さて、今回登壇するにあたり資料を用意していたのですが、発表時間の関係で削除してしまった内容がいくつかあるため、ここで紹介させてください go <-> cgo のオーバーヘッドを何とかしたい トランポリンコードの世界 c

    Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました - Mirrativ Tech Blog
    mom0tomo
    mom0tomo 2023/06/07
  • GoによるSQLクエリテストの取り組み | メルカリエンジニアリング

    この記事は、Merpay Tech Openness Month 2023 の1日目の記事です。 背景 メルペイのバックエンドエンジニアのa-r-g-vとsminamotです。私達はメルペイ加盟店の管理システムを開発しているチームに所属しています。私達のチームには、複雑な条件を持つBigQueryのSQLクエリがいくつか存在しています。例えば、加盟店管理に関する費用計算などの計算クエリのように、外部環境の変化によって要件が定期的に変更され、マイクロサービス化などのシステム化が難しいクエリがあります。このようなクエリは複雑であるだけでなく、テスタビリティにも問題がありました。そのため、開発者がテストを実施することが困難になっており、クエリの変更を安心して行うことができない状態にありました。 クエリの複雑性 抽出条件の複雑さと複数のマイクロサービスへの依存により、クエリが複雑になっていました。

    GoによるSQLクエリテストの取り組み | メルカリエンジニアリング
    mom0tomo
    mom0tomo 2023/06/07