タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

golangに関するClomieのブックマーク (10)

  • context.Context の Value のみを引き継いでコピーする方法

    よろしくどーぞ。@knwoop です この記事はGo Advent Calendar 2021の22日目の記事です。 この記事は Context をコピーするため Tips を紹介します。 ちょっと特殊なのは、Context にすでにセットされている timeout を無視して value のみを引き継ぐ方法を紹介したいと思います。 主なユースケース 複数の API に対して跨ぐ原子性を持つリクエストするケースがあるとします。以下の様なコードAPI2 がリクエスト失敗したときに API1 に Rollback します。 if err := api1.Request(ctx); err != nil { return fmt.Errorf("error api1 Request: %w", err) } if err := api2.Request(ctx); err != nil { if

    context.Context の Value のみを引き継いでコピーする方法
  • Goのテーブル駆動テストをわかりやすく書きたい

    Goでテーブル駆動テストを書いていると、書いているときは「すげー読みやすくテスト書けてるぞ!」と思っていても、落ち着いてから見てみると「なんだこれ...訳がわからん...」となることがあると思います。(自分はよくあります。) この記事は、このようなことを解決するのに役立つtipsについてまとめています。主にテストケースについて焦点を当てています。 テストしやすいコード設計に興味がある方は や を参考にしてください。 はじめに この記事はパーソナライズGopher道場で学んだことを元に書いています。 そして、この記事で紹介するテーブル駆動テストの書き方は主観に基づいており、 あくまでテストの1つの書き方にすぎないです。 なので、「この書き方をしないとダメ!」というものではないので、みなさんの考え方やプロダクトに合わせて、柔軟にこの記事で紹介するtipsを取り入れていただけると幸いです。 結論

    Goのテーブル駆動テストをわかりやすく書きたい
  • Goにおいてアクターモデルを実現するライブラリ"Molizen"とその未来

    こんにちは。@sanposhihoです。 この記事では、アクターモデルとはなんぞやという話から始まり、僕が卒業論文のプロジェクトとして作成したGoのライブラリ、“Molizen”の紹介をします。 わりと長く、乱文ですが、適宜読み飛ばして興味のある部分だけをご覧いただければと思います。 マサカリは優しく投げてください。ここはこうした方がいいんじゃないかみたいなのも参考にしたいので是非。 Twitter(@sanpo_shiho)に投げていただいても、雑にGitHubのissueを立てていただいてもいいです。 sanposhiho/molizen: Molizen is a typed actor framework for Go. Goのアクターモデルのフレームワークを公開しました。未完成なので暖かく成長を見守ってください🌱 sanposhiho/molizen: Molizen is a

    Goにおいてアクターモデルを実現するライブラリ"Molizen"とその未来
  • Goのnet/httpのkeep-aliveで気をつけること - Carpe Diem

    概要 Idle connectionをプールするkeep-aliveの仕組みですが、Goで適切に使用するためにはいくつか注意があります。 環境 golang/go 1.13.1 TCP Keep-Aliveの挙動をパケットキャプチャで確認する 例えば以下のようにDefaultTransportの一部の設定(①、②)をイジってリクエストを送ると client = &http.Client{ Transport: &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 10 * time.Second, // ① DualStack: true, }).DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTim

    Goのnet/httpのkeep-aliveで気をつけること - Carpe Diem
  • Effective Error Handling in Golang

    This article explores Go error handling. Earthly is popular with Go developers for ensuring reproducible builds. Check it out. Error handling in Go is a little different than other mainstream programming languages like Java, JavaScript, or Python. Go’s built-in errors don’t contain stack traces, nor do they support conventional try/catch methods to handle them. Instead, errors in Go are just value

    Effective Error Handling in Golang
  • Deep Dive into The Go's Web Server

    Gonet/httpパッケージはとてもよくできており、Webサーバーを動かすのに必要になる「httpコネクションを確立してリクエストを読んでルーティングして……」という手続き的な処理を気にせずとも誰でも簡単にWebサーバーを立てられるようになっています。 ですが、そのnet/httpが代わりにやってくれている「裏側の処理」の部分が気になる、何やっているんだろう?と不思議に思っている方はいませんか? このでは、実際に筆者がnet/httpパッケージのソースコードを読み込んだうえで、「GoのWebサーバーがどのような仕組みで起動・動いているのか」というところについて、図を使いながら解説しています。

    Deep Dive into The Go's Web Server
  • go-profiler-notes/guide/README.md at main · DataDog/go-profiler-notes

    Introduction: Read This · Mental Model for Go · Profiling vs Tracing Use Cases: Reduce Costs · Reduce Latency · Memory Leaks · Program Hanging · Outages Go Profilers: CPU · Memory · Block · Mutex · Goroutine · ThreadCreate Viewing Profiles: Command Line · Flame Graph · Graph Go Execution Tracer: Timeline View · Derive Profiles Go Metrics: MemStats Other Tools: time · perf · bpftrace Advanced Topic

    go-profiler-notes/guide/README.md at main · DataDog/go-profiler-notes
  • Go 1.16のembedとchiとSingle Page Application | フューチャー技術ブログ

    シングルページアプリケーションは、一つのHTMLファイルであらゆるページを表現します。history APIを使ってそのようなページが実際にあるかのように振る舞います。 一方で、画面がリロードされたとき、メールでSNSでシェアされたときにその該当ページをきちんと再現するためには、サーバー側でハンドリングを行う必要があります。具体的には、存在しないページがリクエストされたら、アプリケーションのルートとなるHTMLファイルの内容をそのURLから配信するというものです。 https://angular.jp/guide/deployment#server-configuration それにより、どのURLでもJavaScriptが動作し、そのURLで表示すべきコンテンツが表示されます。もし想定していないパスの場合は、ウェブサーバーではなく、JavaScriptがエラーを出します。 Goでウェブサ

    Go 1.16のembedとchiとSingle Page Application | フューチャー技術ブログ
  • GoのDIライブラリgoogle/wireの使い方 - 一休.com Developers Blog

    こんにちは。宿泊事業部の宇都宮です。この記事では、GoのDIライブラリgoogle/wireの使い方を紹介します。 この記事は一休.com Advent Calendar 2019の9日目の記事です。 DIとは GoのDIライブラリ wireの使い方 Providerのエラーハンドリング Injectorのカスタマイズ Provider Set インタフェースのバインド 構造体のフィールドを参照する 細かな注意点 値とポインタの違いに注意 go runするときはwire_gen.goも一緒に おわりに DIとは DI(Dependency Injection, 依存性の注入)とは、あるオブジェクトが依存しているオブジェクトを自ら用意するのではなく、外部から渡してもらう(外部から注入する)というデザインパターンです。 例として、以下のように、監督の名前を渡すとその監督の映画を全てリストにし

    GoのDIライブラリgoogle/wireの使い方 - 一休.com Developers Blog
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

    こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 記事がどなたかの一助になりますと幸いです。 なお記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま

    今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
  • 1