並び順

ブックマーク数

期間指定

  • から
  • まで

121 - 160 件 / 375件

新着順 人気順

goの検索結果121 - 160 件 / 375件

  • つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ

    はじめに こんにちは、LayerXの id:convto です。 そしてこれは LayerX アドベントカレンダー (概念) の1日目の記事です。 アドベントカレンダー盛り上げていくぞ〜ということで11月から始まるらしいです。だいぶフライングしてるけど枠もかなり埋まっててすごい。 せっかくなのでお祭り参加したいぞ〜ということで一発目です。よろしくお願いします。 静的解析つくろうとしたきっかけ ちょうどつい最近記事になった下記の輪読会がきっかけでした。 tech.layerx.co.jp このなかで、mapのrange accesssについて、元mapのcopyを取らないから破壊するとループ挙動が壊れる可能性がある旨が言及されていました。 そのときは雑談で「range accessしてるmapに再代入してたら怒る!みたいな考え方で整理したら静的解析できそうっすよね〜」みたいな話をしたんですが

      つくってまなぶ静的解析のすすめ - LayerX エンジニアブログ
    • Goで関数の引数に、union型っぽくstruct Aもしくはstruct Bのどちらかを受け取れるようにしたい - $shibayu36->blog;

      Goで関数の引数に、struct Aという型もしくはstruct Bのどちらかを受け取るということをしたかった。interfaceをちゃんと切ってそれに必要なメソッドをAとBに実装することで実現できることを知った上で、あまり丁寧にそういうことをせずにやりたい。 色々調べると、genericsを使うとできるようだ。 package main import "fmt" type A struct { Field1 int } type B struct { Field2 string } type AorB interface { A | B } func PrintAorB[T AorB](s T) { // Tで受け取ったものをそのままs.(type)とは出来ないので、一旦anyへキャスト switch v := any(s).(type) { case A: fmt.Println(v.

        Goで関数の引数に、union型っぽくstruct Aもしくはstruct Bのどちらかを受け取れるようにしたい - $shibayu36->blog;
      • bmf-tech.com - Goでオレオレ証明書がほしいときの一手

        GoでHTTPサーバーを書いているときなどオレオレ証明書がほしいときに役立つワンライナー。 go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -rsa-bits 2048 -host localhost cert.pemとkey.pemが用意できる。 openssl使ったりmkcert使ったりしていたけどGo使っていたらこれで良さそう。 cf. Source file src/crypto/tls/generate_cert.go

        • Go製バイナリを配布するためのGitHubワークフロー - Plan 9とGo言語のブログ

          前置き 以前、BuildInfoからバージョンを取得する方法を紹介しました。 blog.lufia.org go installで正規の公開されたバージョンをインストールした場合は、以下の出力においてmodの行が示すように、sum.golang.orgでチェックサム等が検証されてバイナリのメタデータに埋め込まれます。 $ go version -m dotsync dotsync: go1.22.2 path github.com/lufia/dotsync mod github.com/lufia/dotsync v0.0.2 h1:JWm92Aw8pSKJ4eHiQZIsE/4rgwk3h5CjEbJ/S30wiOU= build -buildmode=exe build -compiler=gc build -trimpath=true build DefaultGODEBUG=ht

            Go製バイナリを配布するためのGitHubワークフロー - Plan 9とGo言語のブログ
          • 【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog

            こんにちは、バックエンドエンジニアの藤井脩紀です。 今回の記事では日付計算に潜む罠についてお話しさせていただきます。 なお今回はGoでの事例をご紹介しますが、原理的には他の言語やライブラリでも同様の事象が発生する可能性があります点にご注意ください。 time.Time.AddDateの注意点 突然ですがここでクイズです。 来月が何月か知りたいので以下のようなコードを書きました。 このコードを実行したのは10月だとします。 結果は何になるでしょう? // AddDateの引数は順に年、月、日でそれらの値を加算したtime.Timeを返してくれます fmt.Printf("%d月\n", time.Now().AddDate(0, 1, 0).Month()) 「え、11月でしょ?」と思う方もいらっしゃるかもしれませんが正確には異なります。 焦らさずに書きますが答えは「11月か12月のどちらか

              【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog
            • freeeカードチームの開発(Go)から得た学びベスト5 - freee Developers Hub

              この記事はfreeeアドベントカレンダー2023の19日目の記事です。 こんにちは!freeeカードチームのmattsunです。freeeカードUnlimitedの開発運用をしています。私は1年前にfreeeに入社しfreeeカードチームに所属しています。これまでの自分のエンジニアとしてのキャリア(10年強)を通してみても、今のチームではPRレビューやリファクタなどからの学びが多いなぁと感じます。個人的に学びがあったことやチームとしての知見が深まったもののうち、ベスト5(私の主観)をまとめます。 freeeカードシステムは、フロントエンド(TS,React)・BFF(RoR)・Backend(Go)で構成されており、Goでの開発比率が多いことから、本記事はGoのコードに関する言及が多いです。freee社全体をみるとRailsで開発されたシステムも多いですが、Goで開発しているサービスもある

                freeeカードチームの開発(Go)から得た学びベスト5 - freee Developers Hub
              • プロダクト開発を行いながらOSS活動も緩くやる - ANDPAD Tech Blog

                ANDPADボード プロダクトテックリードの土屋(tomtwinkle)です 先日CHIYODA Tech #3 にLT枠で参加してきました! CHIYODA Techとは、千代田区にオフィスを構える企業が運営・登壇するLTイベントです。 今回は弊社9Fのイベントスペースで開催させていただきました! アンドパッド以外にKINTOテクノロジーズさん、日本経済新聞社さん、スタディストさんがLTで参加されていました。 他社さんのLTも拝見させてもらって皆さんそれぞれOSSに対する様々な想いや課題を感じているんだなと勉強になりました。 LT後みんなでスナックミーさんから提供頂いたスナックをつまみに飲みながらテーブル毎に思い思いに喋るアンカンファレンスも非常に楽しかったです。 LT内容について 今回私が発表させてもらったLTについて少しだけ解説させていただきます。 speakerdeck.com ア

                  プロダクト開発を行いながらOSS活動も緩くやる - ANDPAD Tech Blog
                • 最近のGoのOpenAPI Generatorの推しはogen - ぷらすのブログ

                  はじめに OpenAPI の yaml ファイルから Go のコードを生成する OSS ツールは何種類か存在します。 よく使われるのはOpenAPITools/openapi-generatorやdeepmap/oapi-codegenでしょうか。 ググると日本語の記事もたくさん出てきます。 こんにちは、バクラク事業部 バクラクビジネスカード開発チームでEMとTechLeadを担当している高江 @shnjtk です。 今回は、openapi-generator を使ってOpenAPI定義ファイル(OpenAPI Specification)からGoのコードを生成する方法と、運用時のTipsについてご紹介します。 背景 バクラク事業部では、スキーマ駆動開発によりDBやGraphQLのスキーマ定義、OpenAPI定義ファイルなどから自動生成されたコードを積極的に利用する開発スタイルが採用されて

                    最近のGoのOpenAPI Generatorの推しはogen - ぷらすのブログ
                  • Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立

                    Cloudflare Meet-up Tokyo Vol.2で発表した資料です https://cfm-cts.connpass.com/event/291753/

                      Cloudflare Zero Trustを利用したセキュアな開発環境へのアクセス手法の確立
                    • クリーンアーキテクチャをパン工場で説明する【Go】

                      はじめに 本記事は技術書典16(2024)で一部執筆させていただいた「CA Tech Lounge note #2」のクリーンアーキテクチャとパン工場を元に、一部抜粋&変更したものです。 本記事の対象読者 本記事では、クリーンアーキテクチャを全くわかっていない筆者が、一度個人開発したものをクリーンアーキテクチャにリファクタリングしていく過程で学んだことをまとめていきます。そのため、以下のような読者を想定しています。 クリーンアーキテクチャを聞いたことがあるけどわからない人 コードは書くけれどアーキテクチャを意識したことはない人 アーキテクチャを意識して開発したい人 クリーンアーキテクチャを一度学んでもピンと来なかった人 Goが好きな人! リファクタリング前の筆者の状況 バックエンド歴は半年弱ほどで、実務経験としてはPythonで簡単なAPIを実装するアルバイトのみになります。アーキテクチャ

                        クリーンアーキテクチャをパン工場で説明する【Go】
                      • Goのテスト安定性向上のためにFlakyなテストを再試行する機能を導入する提案 - tomato3713’s blog

                        Go言語にFlakyなテストへのサポートを追加する提案が面白かったので紹介します。 概要 Flakyなテストとは、コードに変更がないにもかかわらずテストが成功したり失敗したりと不安定な実行結果になるテストのことです。 テスト結果は本来なら全て成功ならリリース可能、1つでも失敗すればバグがあるのでリリース不可のようにリリースの可否を判断するための情報です。 そのため、不安定なテストは書かないようにすることが大前提です。 しかし、実際にはflakyであるとわかっていても修正が難しかったり、修正するための時間がないのでそのまま残すという判断をすることもあります。 Flakyなテストは削除するというのも手ではありますが不安定であってもテストが無いよりはマシとして残すこともあると思います。 github.com この提案では、Flakyなテストを扱うための機能を追加するものです。 初めの提案内容は、

                          Goのテスト安定性向上のためにFlakyなテストを再試行する機能を導入する提案 - tomato3713’s blog
                        • More powerful Go execution traces - The Go Programming Language

                          The Go Blog More powerful Go execution traces Michael Knyszek 14 March 2024 The runtime/trace package contains a powerful tool for understanding and troubleshooting Go programs. The functionality within allows one to produce a trace of each goroutine’s execution over some time period. With the go tool trace command (or the excellent open source gotraceui tool), one may then visualize and explore t

                            More powerful Go execution traces - The Go Programming Language
                          • Goを改善するためのGo Telemetry

                            はじめに こんにちは!Google CloudでオブザーバビリティやSRE関連の担当をしているエンジニアです。この記事はGoアドベントカレンダーの22日目の記事です。 Goとオブザーバビリティ 私は業務でオブザーバビリティを中心として啓蒙活動や開発を行っているわけですが、その中で常に「改善にはまず計測が必要です」というメッセージをさまざまな方々にお伝えしています。 Goでは計測のための仕組みとして( testing.B あるいは go test -bench として知られる)ベンチマーク[1]や pprof が最初期から[2]用意されていて、パフォーマンス計測はかなり標準が充実した言語になっています。 そして近年もそれに満足せず、Goを改善するための計測の仕組みがいくつも提案されています。 たとえばruntime/metricsはdesign #37112で提案されてGo 1.16から導入

                              Goを改善するためのGo Telemetry
                            • Go を Wasm にビルドして Google Apps Script で動かす

                              Go のコードで文字列の変換をする関数があり、これが Google スプレッドシート上の関数としても利用できれば検証[1]に便利かもしれないと思いました。 Google スプレッドシートでは Apps Script の関数をセル上で実行できるので、Go のコードを Wasm にビルドして JavaScript から呼び出すことができれば良いのではないかと考え、実際に試してみることにしました。 動作環境 Go 1.22.2 Apps Script の設定 Chrome V8 ランタイムを有効にする その他 macOS の pbcopy コマンド[2]を利用した手順を記載していますが、Linux 環境でも pbcopy を他の手段に置き換えることで同様に動作しました。 事前調査 Go を Wasm にビルドして GAS で動かす事例は見当たりませんでしたが、Rust を Wasm にビルドして

                                Go を Wasm にビルドして Google Apps Script で動かす
                              • Goの自動テスト高速化のための調査と改善手法 - Cluster Tech Blog

                                はじめに こんにちは、クラスター株式会社でソフトウェアエンジニアをやっているid:shiba_yu36です。 クラスターではGoの自動テストをCircleCIで実行しています。入社して以降、この自動テストの実行時間が少し長いと感じたため、調査と改善を進めてきました。結果として速度を改善できたので、この記事でGoの自動テスト高速化のための調査と改善手法について共有したいと思います。 はじめに Goの自動テストで課題だったこと 最終的な結果 自動テスト高速化の流れ テスト実行時間のボトルネックを調査する CircleCIのTIMINGタブで大まかなボトルネックを調査する make testのボトルネックを調査する 高速化でやるべきことを決定する 1つずつ改善し結果を計測する go generateの成果物をレポジトリにcommitし自動テスト上では実行しない: 2分短縮 ビルドキャッシュを用い

                                  Goの自動テスト高速化のための調査と改善手法 - Cluster Tech Blog
                                • Goの標準のutf8.RuneStart関数がエレガントすぎる

                                  先日以下の記事を書きました。 ここでUTF-8の最初の文字かどうかの判定を以下の自作した関数で実装していました。 const ( t1 = 0b00000000 tx = 0b10000000 t2 = 0b00000110 t3 = 0b00001110 t4 = 0b00011110 ) func isUTF8LeadByte(tmp byte) bool { if tmp&tx == t1 { return true } tmp >>= 3 if tmp == t4 { return true } tmp >>= 1 if tmp == t3 { return true } tmp >>= 1 if tmp == t2 { return true } return false }

                                    Goの標準のutf8.RuneStart関数がエレガントすぎる
                                  • 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ルーティングの強化 | フューチャー技術ブログ
                                    • Unified Diff 形式の差分から Go AST を構築して feature flag を自動計装する

                                      Go Conference 2024 の登壇資料 https://gocon.jp/2024/sessions/11/

                                        Unified Diff 形式の差分から Go AST を構築して feature flag を自動計装する
                                      • Goのiterの知らなくても良いこと

                                        本記事ではGoのiter(イテレーター)についての「知らなくても良いけど知っていたらイザという時に助かるかもしれないこと」を紹介します。iterの基本的な使い方等は説明しませんので、以下のmattnさんによる記事を参照してください。 Goのiterの実現方法 では本題。Goのiterとはコルーチンです。Goにおけるコルーチンの導入はRuss CoxのCoroutines for Goという記事にその分析と設計が書かれています。同記事の日本語による拙作のメモがありますので気になる方はそちらもご参照ください。 Russ Coxはこの記事において、コルーチンとはコールスタックの分離と任意の場所への付け替えだ、と分析しました。またgoroutineとチャンネルを用いてコルーチンを実装し、満たすべき機能的要件を明らかにし、また性能的要件からGo言語本体に必要な変更を示しています。この機能と性能の要件

                                          Goのiterの知らなくても良いこと
                                        • リンカを変えてgo buildを 速く出来るか

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

                                            リンカを変えてgo buildを 速く出来るか
                                          • OpenTelemetry Go Deep Dive

                                            はじめに この記事はGo 言語 Advent Calendar 2023及びOpenTelemetry Advent Calendar 2023 8 日目の記事です。 今まで OpenTelemetry に関する記事をいくつか書いてきました(App Runner にデプロイしたアプリからトレースを X-Ray や Jaeger で可視化する記事やコンテナでデプロイした Lambda から X-Ray に OpenTelemetry でトレースを送る記事など)。今までの記事はどちらかというとインフラ観点のものが多く、アプリのサイドカーで OpenTelemetry Collector を動かしてマネージドサービスや OSS のツールにトレースを送る設定だったり、コンテナで動かして docker compose でローカルでも動かせるようにするだったりにフォーカスした内容が多かったです。一方で

                                              OpenTelemetry Go Deep Dive
                                            • カジュアルに使えるスタブサーバとしてhttpstubとgrpcstubを作って使っている - Copy/Cut/Paste/Hatena

                                              このエントリは Go Advent Calendar 2023 12 日目の記事です。 Goのテスティングパッケージで一番好きなパッケージは net/http/httptest です。 テスト実行時に実際にHTTPサーバを立ててHTTPリクエストを受けるというシンプルかつ強力なアプローチが良いです。 クライアント側にエンドポイントを変える仕組みさえあればクライアントのリクエストを受け付ける形でテストを構築することができるので、選択肢に入れておきたいテスト構成です。 ところで、私たちは runn (ランエヌ)というシナリオテスティングツールを開発しています。 github.com runnはHTTPクライアントでありgRPCクライアントでもあるのですが*1、そのrunn自体のテストのためにhttpstubとgrpcstubを作って使用しています。 httpstub github.com ht

                                                カジュアルに使えるスタブサーバとしてhttpstubとgrpcstubを作って使っている - Copy/Cut/Paste/Hatena
                                              • Fixing For Loops in Go 1.22 - The Go Programming Language

                                                David Chase and Russ Cox 19 September 2023 Go 1.21 includes a preview of a change to for loop scoping that we plan to ship in Go 1.22, removing one of the most common Go mistakes. The Problem If you’ve written any amount of Go code, you’ve probably made the mistake of keeping a reference to a loop variable past the end of its iteration, at which point it takes on a new value that you didn’t want.

                                                  Fixing For Loops in Go 1.22 - The Go Programming Language
                                                • 最強の囲碁AI、棋士の徹底した悪手に翻弄されて敗れる→完全無欠と思われたAIも「人間が露骨に弱点を狙えばぶっ壊せるという可能性」

                                                  芝野龍之介 @igospicyspy 囲碁棋士兼エンジニアです。YouTube始めました。囲碁棋士芝野虎丸名人の兄です。囲碁に関することをメインに、自由につぶやきます。虎丸との共著『アルファ碁Zeroの衝撃』、著書『一問一答 9路盤の手筋』、『芝野虎丸の軌跡』、『芝野虎丸』を買っていただけるととても嬉しいです😃 m.youtube.com/@igoshibano 芝野龍之介 @igospicyspy 2月に私が囲碁AIを倒したことに関して取材をされ、記事になりました~。 囲碁AI、こわれる 人間の悪手に翻弄、大石死す AI社会に警鐘:朝日新聞デジタル asahi.com/articles/ASR9R… 2023-09-25 13:12:29

                                                    最強の囲碁AI、棋士の徹底した悪手に翻弄されて敗れる→完全無欠と思われたAIも「人間が露骨に弱点を狙えばぶっ壊せるという可能性」
                                                  • Next.jsとGoを使っていきます - トレタ開発者ブログ

                                                    こんにちは、VPoEの北川です。 今回はトレタで現在使用している技術スタックについて紹介します。 創業時から稼働している予約・顧客台帳サービス「トレタ」から現在の注力事業のモバイルオーダーサービス「トレタO/X」までをあらためて振り返ってみると、まるで異なる技術スタックになっているので歴史的な背景などを辿りながら紹介していきます。 技術スタックの変遷 予約・顧客台帳「トレタ」 会社名にもなっている予約・顧客台帳の「トレタ」は創業当時から稼働している築11年ほどのシステムです。 サーバーサイドにはRubyとRubyOnRailsで作られた巨大なコードベースのAPIサーバーがあり、予約台帳のiOSアプリやウェブ予約などのWebアプリケーションなどが利用しています。 長年このモノリシックなシステムを成長させてきたので、以前からトレタを知ってくださっている人にはトレタはRubyの会社と認知されてい

                                                      Next.jsとGoを使っていきます - トレタ開発者ブログ
                                                    • IIJ、Markdown形式の文章を手軽にプレビューできる「cats_pr_dogs」を無償公開

                                                        IIJ、Markdown形式の文章を手軽にプレビューできる「cats_pr_dogs」を無償公開
                                                      • OpenTelemetry 分散トレーシングのシステムアーキテクチャ

                                                        sumirenです。 SREやSDETや技術顧問やフルスタックエンジニアをしています。 この記事は OpenTelemetry Advent Calendar 2023 3日目の記事です。 2日目の記事は @k6s4i53rx さんの OpenTelemetryとOpenObserveを使ってKubernetes監視をかじる でした。 背景 OpenTelemetryを使うと、分散システムの各サブシステムでどのように処理が進んだのか可視化することができます。 経験を積んだエンジニアの方であれば、各サブシステムとオブザーバビリティバックエンドが一体どのようなコラボレーションをしているのか気になることかと思います。実際、SDKやOpenTelemetry Collectorを使って手軽に分散トレーシングを実現できても、仕組みを理解できていないと、いざトラブルが発生したときに問題解決が難しいでし

                                                          OpenTelemetry 分散トレーシングのシステムアーキテクチャ
                                                        • Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき

                                                          普段Go書いているときにそこまで気にしてなかったが、ふと気になったので色々パターンを挙げてみる。なおこの記事には「答え」が書かれてないので、みなさんの意見を聞かせてください。 複数の引数を取るパターン一覧 そのまま引数を羅列する 複数の引数をまとめたstructを取る Functional Options Pattern そのまま引数を羅列する 例えばHTTPリクエストを行うような関数があったとして、 func Request(ctx context.Context, method http.Method, _url string, query url.Values, formValues url.Values) error { // do something } というシグネチャが考えられる。 実際にnet/http.NewRequsetWithContext は func NewReq

                                                            Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき
                                                          • Go言語でsliceの重複排除 (slicesやsamber/loパッケージを使う場合) - stefafafan の fa は3つです

                                                            Go言語でsliceの重複排除について書きます。Go 1.21前提です。 slices パッケージを使っての重複排除 Go 1.21から slices パッケージが増えました。ここに生えている関数を利用して重複削除のコードが書けます。 pkg.go.dev 例えば int の slice の重複排除は以下のように書けます。 integers := []int{1, 2, 2, 1} slices.Sort(integers) // [1 1 2 2] uniqValues := slices.Compact(integers) // [1 2] slices.Compact は連続する値を1つにまとめる関数なので、重複排除したい場合は slices.Sort で先にソートする必要があります。 User という struct の slice を id で重複排除したい場合はどうすればいいかと

                                                              Go言語でsliceの重複排除 (slicesやsamber/loパッケージを使う場合) - stefafafan の fa は3つです
                                                            • Synchro - タイムゾーン型安全な Go ライブラリを開発している

                                                              synchro と呼ばれる Go でもタイムゾーンを含めて型比較できるようになるライブラリを開発し始めました。スターください。 こんな感じで使えます。 package main import ( "fmt" "time" "github.com/Code-Hex/synchro" "github.com/Code-Hex/synchro/tz" ) func main() { utcNow := synchro.Now[tz.UTC]() jstNow := synchro.Now[tz.AsiaTokyo]() fmt.Println(utcNow) fmt.Println(jstNow) // Output: // 2023-09-02 14:00:00 +0000 UTC // 2023-09-02 23:00:00 +0900 JST fmt.Println("------") d

                                                                Synchro - タイムゾーン型安全な Go ライブラリを開発している
                                                              • Cleanup handling in Go / Go Conference 2024

                                                                CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7

                                                                  Cleanup handling in Go / Go Conference 2024
                                                                • Dive into gomock / Go Conference 2024

                                                                  Go Conference 2024 https://gocon.jp/2024/ Blog (in Japanese): https://blog.utgw.net/entry/2024/06/08/181746

                                                                    Dive into gomock / Go Conference 2024
                                                                  • GoのLanguage Server Protocol実装、 「gopls」の自動補完の仕組みを学ぶ

                                                                    Go Conference 2024の資料です ※13枚目に誤解を招く表現がありました。Golandのバックエンドはgoplsではなく独自のものです。

                                                                      GoのLanguage Server Protocol実装、 「gopls」の自動補完の仕組みを学ぶ
                                                                    • ARMアーキテクチャがメモリアクセスを省略することで意図したベンチマークになっていなかった話

                                                                      概要 あるサンプルコードのベンチマークを測定したところ、期待していたよりも18倍速い結果が出力されました。バイナリを調査してみると、メモリ読み出しの命令が1つ増えるだけでこの性能差が生じていました。さらに調査を進めると、ARMアーキテクチャは連続したメモリへの書き込みを1つにマージし、実行を省略する可能性があることがわかりました。そのため、一般的なベンチマークのように複数回の測定結果を平均化するやり方では、正しい速度を測定できていませんでした。 「パフォーマンスを解釈するのにアーキテクチャの理解が不可欠だった事例」として面白かったのでこの記事を書いてみました。Go言語で説明しますが、言語に依存しない話だと思います。 得られた教訓 バイナリを見ても説明できない性能差は、アーキテクチャの理解によって説明できることがある マイクロベンチマークは、何を計測しているのかを理解した上で実施する必要があ

                                                                        ARMアーキテクチャがメモリアクセスを省略することで意図したベンチマークになっていなかった話
                                                                      • hatena.go #1 開催レポート - Hatena Developer Blog

                                                                        こんにちは、はてなでアプリケーションエンジニアをしている id:lufiabb です。 2024年1月31日(水)に、 hatena.go#1 を東京オフィスで開催しました。当初想定していた以上の方に登録・参加いただけました。ありがとうございました。 このエントリーでは、当日の様子をご紹介します。 hatena.go#1について 「hatena.go」は、Go言語を普段から使っているエンジニアやWebアプリケーションを開発しているエンジニアのみなさまを対象に、Goにまつわる情報発信と情報交換を目的としたイベントです。 今回のhatena.goは、はてなのエンジニア2名による15分トークと、connpassにて公募LT枠にご応募頂いた方3名によるLTが行われました。 発表概要と資料 はてなのサービスを支えるGo はてなにおけるGo利用のこれまでとこれから speakerdeck.com 一人

                                                                          hatena.go #1 開催レポート - Hatena Developer Blog
                                                                        • Go 言語だって minify されたい!「mingo」の紹介

                                                                          HTML/CSS や JavaScript など、 Web フロントエンドにおいては配信時にファイルを minify することが一般的です。 ファイルを minify する = ファイルサイズを小さくすることでネットワークの通信量を削減し、結果として Web ページの読み込み速度を向上させることができます。 <!-- 例えばこれが --> <!DOCTYPE html> <html> <head> <title>Hello World Sample</title> </head> <body> <h1>Hello, World!</h1> <button id="button">Click</button> </body> <script> const button = document.getElementById("button"); button.addEventListener("

                                                                            Go 言語だって minify されたい!「mingo」の紹介
                                                                          • GoプロジェクトへのOpenTelemetry計装でeBPF自動計装を採用しなかった話

                                                                            既存GoプロジェクトにOpenTelemetryを計装する機会がありました。eBPFによる自動計装ではなく、手動計装を選んだ理由を説明します。 GoアプリケーションへのOpenTelemetry計装手段 Goにおいては、OpenTelemetryの自動計装が公式で用意されていません。公式サイトにAutomaticの章がないことからわかります。おそらく、ランタイムの制約で実行時にアプリケーションの挙動を変えることが難しいのでしょう。 トレースに十分なスパンを含めるために、現状では以下の2つの計装手段があります。既存のGoアプリケーションに導入する手間や影響範囲をイメージいただくために、概要に絞って解説します。 手動計装 eBPFによる自動計装(Work In Progres) 1. 手動計装 まず、OpenTelemetryのSDKをインストールし、セットアップをします。 func main

                                                                              GoプロジェクトへのOpenTelemetry計装でeBPF自動計装を採用しなかった話
                                                                            • 難しい問題をコンパイラレベルで弾くことができるRustの並行処理 データ共有の有無から見る、2つのサンプルコード

                                                                              Go、Python、Kotlin、Rust、TypeScript の5つの言語について「並列処理、並行処理の手法」というテーマに絞り解説する「並列処理をGo/Rust/Kotlin/Python/JSで解説!思想の違いを体感しよう」。Rust編では鈴木文太氏が登壇。Rustの並行処理について、データ共有がないパターン、データ共有があるパターンそれぞれのコードを紹介します。 鈴木氏の自己紹介と、今日話すこと 鈴木文太氏(以下、鈴木):よろしくお願いします。「Rustにおける並行処理」について発表していきたいと思います。私はGO株式会社の鈴木文太と申します。2021年6月に入社して、今はタクシー事業者向けの管理画面の開発などをやっています。 今回話すことについてですが、まずプロセスと並行・並列処理の基本について少しお話ししたあとに、スレッド間でデータ共有がない場合のRustのコードと、スレッド

                                                                                難しい問題をコンパイラレベルで弾くことができるRustの並行処理 データ共有の有無から見る、2つのサンプルコード
                                                                              • Goroutineの使い方

                                                                                この記事はGo 言語 Advent Calendar 2023のシリーズ2の4日目の記事です(穴があったので入りました!)。 goroutineの特徴 コルーチンをベースにコルーチンの以下の点を改良 言語組み込みワード「go」にて起動できる M:Nスレッドシステム採用によりマルチコア分散処理が可能 ブロッキングを検出したらネイティブスレッドが独立 プリエンプティブ性を追加(Go1.14以降) 以上により、goroutineスレッドシステムはコードを書く人にとって「ネイティブスレッド」の感覚で実装を書くことができ、「コルーチン」のようにメモリやタスクスイッチ負荷が小さく、「コルーチン」のような面倒な制約(期待するレイテンシ以上にCPUビジーにしてはいけないなど)も無いといういいとこどりのスレッドシステムになりました。 ネイティブスレッドライクによる特性 ネイティブスレッドを使ったプログラミン

                                                                                  Goroutineの使い方
                                                                                • バイアスを逆手に取る

                                                                                  Profile id: Songmu (ソンムー) Masayuki Matsuki / 松木雅幸 株式会社ヘンリー VP of Engineering おそらくはそれさえも平凡な日々 http://www.songmu.jp/riji/ https://metacpan.org/author/SONGMU 好きな言語は、PerlとGoと中国語 3 Times ISUCON Winner Using Perl 入門監視 付録C 執筆 「みんなのGo言語」共著者 Profile id: Songmu (ソンムー) What I ♥ Blog / Twitter OSS Agile Full Cycle Development Road Bike, Cycling