並び順

ブックマーク数

期間指定

  • から
  • まで

281 - 320 件 / 2484件

新着順 人気順

golangの検索結果281 - 320 件 / 2484件

  • ぼくのかんがえたさいきょうのGo HTTPサーバー起動方法

    これまで何度か HTTP Server の Graceful Shutdown について記事を書きました。 Go 言語で Graceful Restart をする Go 言語で Graceful Restart をするときに取りこぼしを少なくする Go1.8 の Graceful Shutdown と go-gracedown の対応 最終的に Go 1.8 で Server.Shutdown が導入され、この件は解決を見ました。 しかし、最近「あれ?本当に正しく Server.Shutdown 使えている?」と疑問に思い、少し考えてみました。 というか ↑ の記事もまだ考慮が足りない気がする。 ぼくのかんがえたさいきょうの Go HTTP サーバー起動方法 とりあえず完成形のコード。 package main import ( "context" "log" "net/http" "os

    • SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ

      TIGの辻です。GoのORマッパー連載8日目です。本記事では sqlc を紹介します。早速ですが、結論から行きましょう。 sqlc まとめ SQLファイルからデータベースにアクセスできる型安全なGoのコードを生成するライブラリ 構造体のモデルの手書き実装不要 複数テーブルをJOINしたときのマッパー実装不要 生成されるコードは不要なリフレクションなし SQLをがんがん書きたい、でも面倒なマッパー構造体は書きたくない、という開発者にとっては大きな味方になります。 sqlc の紹介 sqlc はSQLファイルからGoのアプリケーションコードを生成するライブラリです。2020/2に v1.0.0 をリリースし、着々とスターを伸ばしています。2021/08現在は v1.8.0 をリリースしています。本資料で生成しているコードも v1.8.0 を用いています。 https://star-histor

        SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ
      • Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ

        技術記事です。今日は Go の golang.org/x/sync/errgroup についてです。 TL; DR Go が並行処理を得意とするのは事実だけど、とはいえ正しく使うのは難しい(特に channel)。 errgroup なら「並行でダウンロードする」のような頻出パターンをとても簡単かつ安全に使えるので、まずはこれで美味しいところだけ頂いてしまおう。 重い処理を並行にすればあなたのプログラムはカジュアルに数倍速くなる。 多分 errgroup だけで現実の要件の85%くらいはカバーできるはず。 channel も含めてちゃんと使いこなしたいと思ったら、Go 言語による並行処理 がおすすめです。 errgroup とは ドキュメントはここを参照してください。説明を読むよりコード例で見たほうが早いと思うのでこちらをどうぞ。 package main import ( "fmt" "

          Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ
        • GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ

          2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout 2020/11/13 「やってみてよかったことまとめ」、「やってみて困ったこと」、「外部モックサービスを使ったユニットテストの未来」の章を追記 2020/11/18 「やってみてよかったことまとめ」にSNSでもらったフィードバック内容を追記 はじめにこんにちは、TIG 真野です。秋のブログ週間連載の第9弾です。 1年弱ほどGo言語でWebAPIアプリケーション開発を行っていますが、かなり割り切った構成・テスト方針を採用しました。そろそろ1年弱になり機能開発も比較的落ち着き、保守運用フェーズの割合も徐々に増えてきた頃合いなので、やったこと・学び・反省といった振り返りを共有します。 Goのパッケー

            GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ
          • Go の入力バリデーションパッケージ ozzo-validation を試した。

            はじめに Go のウェブアプリで使う入力バリデーションに関して、ozzo-validation を検討した。 これまでのバリデーション 普段、仕事では labstack/echo という Go のウェブフレームワークを使う事が多いのだけど、バリデーションに関しては labstack/echo のサンプルに合わせて go-playground/validator を使ってきた。 go-playground/validator は機能も豊富で(一応)痒い所に手は届くのだけど、struct にタグを付けて判定させないといけない。これが実に煩わしい。以前 labstack/echo を使ったサンプルを書いたので、それを見て欲しい。 // Comment is a struct to hold unit of request and response. type Comment struct { I

              Go の入力バリデーションパッケージ ozzo-validation を試した。
            • Go 言語でスライスから要素を消すには

              の様に直感的な操作ができるはずです。しかし Go 言語の場合、スライスの伸長にて発生するメモリアロケーションを append 関数と代入を使う事で透過的に行える仕組みを採用しています。例えばスライスの伸長は この様に行います。C言語をかじった事のある方や、プログラミング言語の内部データ構造をご存じの方であれば、リストといった物が伸長の度にメモリを再確保する様な事をやっていない事はご存じだと思います。Go 言語のスライスも同様で、スライスには長さとキャパシティを持っており、キャパシティを超えない範囲で長さだけが増えていき、キャパシティを超えるとメモリが再確保されるという作りになっています。ですので、上記のコードであれば、スライス(実際は SliceHeader)が内部で持っているポインタ、長さ、キャパシティを、代入してやる事で上書きしています。 スライスから要素を消す スライスの伸長と同様に

                Go 言語でスライスから要素を消すには
              • Programming Kubernetesを読んで学んだこと - go_vargoのブログ

                Programming Kubernetesの紹介 「Programming Kubernetes」はO’Reilly社から出版されているKuberntesのアーキテクチャやCustom Controllerの実装、Custom API Serverの実装などについて掘り下げている本です。 Kubernetesのハイレベルアーキテクチャに触れている本は、日本語でもいくつかありますが、ソースベースのローレベルアーキテクチャで触れている本は本書しかないのではないかと思います(私が知らないだけかもしれません)。 著者は元Red Hat → AWSのDeveloper AdvocateのMichael HausenblasさんとRed Hatのprincipal engineerのStefan Schimanskiさんです。 www.oreilly.com 2019/07/21に購入し、2019/

                  Programming Kubernetesを読んで学んだこと - go_vargoのブログ
                • go.modとgo.sumの読み方

                  go.mod 主にモジュールのインポートパスとバージョン情報を書いておくためのファイルで、いくつかのディレクティブを使ってアプリケーションがどのような依存関係を持っているか記述しておきます。 go mod tidy等を実行するとこのファイルを元に依存先を取得し次項で解説するgo.sumを生成します。 サンプル module github.com/ryo-yamaoka/sample-lib go 1.17 require github.com/ryo-yamaoka/direct-dependent-lib v0.0.2 require github.com/ryo-yamaoka/indirect-dependent-lib v0.0.4 // indirect exclude github.com/ryo-yamaoka/direct-dependent-lib v0.0.1 repl

                    go.modとgo.sumの読み方
                  • 効率的なGo

                    本書は、Goアプリケーションの効率やスケーリングに関する疑問に対して、実用的な答えを与えてくれる書籍です。 レイテンシー、CPU、メモリ資源についての知識、またOSやGoがそれらを抽象化している方法について、またソフトウェアの効率に関わるデータ駆動な意思決定を行う事の意味や、計算量解析の手法、最適化状況の例など、実用的なソフトウェアを開発する中での「効率」に関する知識を紹介します。 Goやその他のモダンな言語で書かれたプログラムを設計、作成、変更するソフトウェア開発者、また誰かが書いたソフトウェアを主に運用するDevOpsエンジニア、SRE、シスアド、プラットフォームチームなどの読者が、いつ、どのように効率最適化を適用するかという問いに答えるための知識を身に付けることができるでしょう。 関連ファイル 原著者による本書のサンプルリポジトリ 正誤表 ここで紹介する正誤表には、書籍発行後に気づい

                      効率的なGo
                    • Goのバイナリに静的ファイルを埋め込むツール assets-life を書いた

                      日本語の Go コミュニティだと go-bindata (なんか乗っ取り騒動とか色々あってメンテナンスされてない), go-assets (最近メンテナンス滞りがち) が有名(要出典)なやつです。 これらのライブラリに関してたくさん日本語記事が書かれて、今もたくさん検索に引っかかるのですが、残念ながら最近はメンテナンスが滞っています。 最近は statik の名前もよく見るようになりました。 その他は Resource Embedding - Awesome Go からどうぞ。 で、まあ、今回も完全に車輪の再発明なんですが、他の実装には色々と思うところがあり書いてみました。 shogo82148/assets-life USAGE なにはともあれ、まずは go get してきます。 $ go get github.com/shogo82148/assets-life assets-life

                      • Go と prisma と lit-html と ky で作るモダンな TODO アプリ

                        はじめに 以前から Go の ORM (Object Relational Mapping) 選定の為に、そこそこ時間を使っています。現状は gorp を使っていますが、満足している訳ではありません。 そんな中で見つけた prisma を試すべく、バックエンドに Go と prisma を使った TODO アプリを作ってみる事にしました。 prisma とは prisma (Next-generation ORM for Node.js and TypeScript)は簡単に言うと 自動生成された型付きのクライアントが付いている マイグレーションが出来る モデル定義から CRUD やインデックスを自動生成できる PostgreSQL, MySQL, SQLite3 等をサポート Prisma Studio という GUI が付いている というモダンな ORM です。Nuxt と TypeS

                          Go と prisma と lit-html と ky で作るモダンな TODO アプリ
                        • Re: Goでcsvを操作するための基本的な知識

                          はじめに Println で標準出力してみると以下のように表示されるかと思います。(SHIFT-JIS形式なのでmacでみると文字化けしていますがひとまず置いておきます) 日本では一般的に CSV ファイルは Shift_JIS でエンコードされている事が多いです。Go 言語は内部のエンコーディングが UTF-8 なので、Shift_JIS な CSV ファイルを読み込むと文字化けします。 そこで便利なのが エンコーディングの変換は golang.org/x/text/transform が便利です。このパッケージと、golang.org/x/text/encoding/japanese を使う事で、os.Open で開いたファイルがさも初めから UTF-8 であるかの様に扱う事ができます。 どんな風に扱うか japanese パッケージには japanese.ShiftJIS や jap

                            Re: Goでcsvを操作するための基本的な知識
                          • k6による負荷試験 入門から実践まで

                            https://techfeed.io/events/techfeed-experts-night-20 TechFeed Experts Night#20 〜 Webパフォーマンス・チューニング最前線 : 前編(概要、モニタリング、負荷テスト編)

                              k6による負荷試験 入門から実践まで
                            • gojqのパーサーを書き直しました - プログラムモグモグ

                              jqはJSONを絞り込むツールですが、実はれっきとしたプログラミング言語です。 算術演算子、論理演算子、分岐構文、try・catch、そして関数定義があり、ループは再帰関数で実装します。 単に .foo とか .[0] とかでJSONを辿るだけのツールだと思われている方は、builtin関数の定義を見ていただくと良いかと思います。 selectやmapのように、よく使われる関数でさえ内部実装になっていない (Cで書かれていない) のは面白いですね。 jqのクエリを思ったように書けないという経験から、jqをより深く知るためにGo言語で再実装したのがgojqです。 去年の4月から開発を始め、8月にブログ記事を書きました。 jqのほぼすべての機能を実装しており、pure Goで書かれているのでGo言語のツールに簡単に組み込むことができます。 この記事公開以降も開発を続けています。 --arg,

                                gojqのパーサーを書き直しました - プログラムモグモグ
                              • Serverless連載3: Goでサーバーレス用の検索エンジンwatertowerを作ってみました | フューチャー技術ブログ

                                サーバーレス連載の3回目は検索エンジンを作ってみたお話です。 クラウドサービスが充実してくるにつれて、サーバーレスではいろいろなことができるようになっています。HTTPサーバーは動きますし、RDBやNoSQLなストレージも使えますし、PubSubみたいなサービスも利用できます。これらを駆使するとそこそこ複雑な処理も記述できます。 一方で、上から下までサーバーレスにしようとするとできないものもいくつかあります。例えば、RDBも使えるといっても制約があり、LambdaやCloud FunctionsからRDSやCloudSQLを雑に使うとコネクションを張りすぎる問題があります。LambdaにはRDS Proxyが出始めています。あと、RDBそのものは基本的に常駐型なのでサーバーレスではないです。一応サーバーレスなのもありますが、起動時間が結構かかるらしい(自分ではまだ試してないです)。それ以外

                                  Serverless連載3: Goでサーバーレス用の検索エンジンwatertowerを作ってみました | フューチャー技術ブログ
                                • GitHub - mehrdadrad/tcpprobe: Modern TCP tool and service for network performance observability.

                                  You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                    GitHub - mehrdadrad/tcpprobe: Modern TCP tool and service for network performance observability.
                                  • Goでジョブキューを実装した - オープンソースこねこね

                                    HQというGoで実装したジョブキューを公開しました。 github.com WebのUIもあります。 概要 以下の特徴があります。 Goによる実装で、シングルバイナリ。 スタンドアロンのHTTP APIサーバー。ジョブのデータベースも組み込みであるため、別途特別な依存を必要としないで動作する。 シンプルでプログラミング言語非依存。HTTP APIでジョブを投入し、ジョブはHTTP POSTメッセージをワーカーアプリケーション(Webアプリ)に送信するというアーキテクチャ。 フロントエンドとしてCLIとWebUIを組み込みでサポート。 上記のリポジトリのREADMEにも載せてありますが、ざっくりジョブのフローを図解すると、以下のようなアーキテクチャになっています。 HTTP APIでジョブ(JSON)を投入します。HQはジョブを取り出し、ジョブに記載されたURLにHTTP POSTして、別途

                                      Goでジョブキューを実装した - オープンソースこねこね
                                    • Scala で書いたマイクロサービスを Go で書き直した話 - JX通信社エンジニアブログ

                                      この記事はJX通信社 Advent Calendar 2019 2日目の記事です。 昨日は、たっちさんの「Kubernetes Admission Webhookでリソース作成を自在にコントロールする」でした。 こんにちは、サーバーサイドエンジニアの @kimihiro_n です。 今回は長年動かしてた Scala のマイクロサービスのリビルドを行った話をしようと思います。 TL;DR 新しい言語を投入するのにマイクロサービスは便利 Scala で感じていた問題点を解消しつつ Go へ移行できた 消費メモリが大きく減って安定稼働できるようになった 予防線を貼っておきますと、Scala より Go のほうがいいよね、といった本旨ではありません。 Scala で書いたマイクロサービス 弊社のマイクロサービスの一つにカテゴリ分類専用のサービスが存在します。 カテゴリやキーワードを登録しておくとル

                                        Scala で書いたマイクロサービスを Go で書き直した話 - JX通信社エンジニアブログ
                                      • 🪵 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パッケージ超入門
                                        • Big Sky :: WSL2 でクリップボード使いたい。

                                          WSL2 がリリースされ Windows 10 Home Edition でも使える様になったので色々遊んでるのだけど、Windows 側とテキストを交換したい時に面倒で、クリップボードを共有する方法を模索した。 最悪 /dev/clipboard を実装するまで考えたけど、面倒過ぎたし exe の実行厳しい(何か常駐させてユーザランドから起動する為にサーバがいる)だろうから別の方法を考えた。WSL2 は binfmt (たぶん違うけど良く似た奴だろう) で Windows の exe が起動できるので、コマンド経由で stdin/stdout を read/write できる物を起動する方法を考えた。 で自分で書くかと Windows Terminal 起動した時点で「Windows Terminal からコピペできるやん、いらなくね?」となり、本来の目的を忘れかけていたので、おとなしく

                                            Big Sky :: WSL2 でクリップボード使いたい。
                                          • Goのテストに使える手作りモックパターン - Money Forward Developers Blog

                                            こんにちは。 京都開発拠点でGoエンジニアをしています @yoskeoka です。 Goを中心技術として性能改善やプロダクト間を横断するような機能の設計、実装を行うKTAチーム (京都開発本部 テクニカルアーキテクトチーム) 所属です。 突然ですが、皆さんはGoでテストを書いているでしょうか。 我々はテストを書くことが中長期的なスピードアップに繋がると信じて日々テストを書くようにしています。 KTAではGoの実装をする際にClean Architectureの考えに基づいたpackage分けを行っていますが、packageを分けたり、インターフェースを定義したりとしていくと、テストを書くのが難しい部分というのが出てきます。 そんな場合に使えるモック作りテクニックを今回は紹介したいと思います。 Clean Architectureはテストしやすくなると言うが Clean Architectu

                                              Goのテストに使える手作りモックパターン - Money Forward Developers Blog
                                            • とってもやさしいGo言語入門

                                              フロントエンド用語を100秒で解説するチャンネルを作りました! よかったらチェックしてみてください! はじめに この記事は、Go言語を学び始めたばかりの人や、チュートリアルを読んで途中で挫折してしまったという人に向けて、Go言語の基礎的な文法を解説した記事です。といっても全てをカバーするのは大変だと思ったので、私自身が A Tour of Go を読んで難しいと感じた点をいくつかピックアップして書きました。今回の記事では、ポインタ・構造体・メソッド・インターフェースについて解説していこうと思います。 ポインタ A Tour of Go では、ポインタについて次のような説明をしています。 Go has pointers. A pointer holds the memory address of a value. (訳) Goはポインタを扱います。 ポインタは値のメモリアドレスを指します。

                                                とってもやさしいGo言語入門
                                              • VS Codeのコンテナ拡張機能でGolang勉強環境を構築してみた

                                                ◆初めに Visual Studio Code Remote – Containersという拡張機能を使って、前から気になってたGo言語の勉強用環境を構築しました。 ◆やってみる 使うものをダウンロードしていきましょう。 ・Visual Studio Code https://azure.microsoft.com/ja-jp/products/visual-studio-code/ ・Visual Studio Code Remote – Containers https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack ・docker https://www.docker.com/ VS Codeでフォルダーを開いて、F1 や Ctrl + Shift +

                                                  VS Codeのコンテナ拡張機能でGolang勉強環境を構築してみた
                                                • 無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ

                                                  KanmuでPoolを開発しているhataです。最近、ロボット掃除機を買いました。ロボと猫がじゃれている景色はいいですね。 今回はGoのユニットテストの並行化についての記事です。 TL;DR Goのテストは、並行化することでテスト実行時間の短縮やテスト対象の脆弱性の発見などのメリットがある 基本的にはそのままでも最適化されているが、テストコードにt.parallelを記述することでよりきめ細やかな最適化を施すことができる ただし、一定規模以上のアプリケーションへの導入・運用は大変 テストコードを一気に並行化するtparagenというツールや、並行化忘れを防ぐ静的解析ツールがあり、これらを使うことで無理なくテスト並行化の導入・運用ができる はじめに ユニットテスト並行化とは 本記事では、「並行」「並列」という用語を使用します。本記事におけるこれらの用語を定義します。 並行:複数の処理を独立に

                                                    無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ
                                                  • プロダクトにNext.jsとGoを採用した理由と背景 - ANDPAD Tech Blog

                                                    はじめに こんにちは!エンジニアの柿森です。新規プロジェクトを担当しております。 ANDPADではマイクロサービス開発を推進しており、新規プロジェクトは個別に技術選定を行い、既存システムとAPI経由で連携します。 また、マイクロサービス基盤はk8sで構築されており、死活監視やログ収集もよしなにやってくれる環境が整っております。 新規プロジェクトを立ち上げで、k8s上に乗せることを前提に技術選定を行いました。 技術選定を行うにあたって検討したポイントと、採用した技術について話していきたいと思います。(あくまで筆者個人の考えです。) 採用した技術スタックの概要 フロントエンドはBlitz-jsを参考にNext.jsを採用。 バックエンドはGo + gRPCを採用。 技術選定の方針 大きな方針としては一般的な考えを踏襲しています。 ドキュメントがしっかりしており、GitHubのStarがそれなり

                                                      プロダクトにNext.jsとGoを採用した理由と背景 - ANDPAD Tech Blog
                                                    • GitHub - ContainerSSH/ContainerSSH: ContainerSSH: Launch containers on demand

                                                      You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                        GitHub - ContainerSSH/ContainerSSH: ContainerSSH: Launch containers on demand
                                                      • DDDを実践するためのリポジトリ層の設計(Go言語による例)

                                                        The Go gopher was designed by Renée French. Illustrations by tottie. はじめに この記事は、ドメイン駆動設計(DDD)の中核概念である「リポジトリ」についての理解を深めることを目的としています。リポジトリの基本的な役割と重要性を確認し、Go言語での実装の例を紹介します。 前提 リレーショナルデータベースからデータを取得(更新)するアプリケーションを想定しています サンプルコードは Go 言語で書かれています リポジトリとは まずは、リポジトリの定義を確認してみましょう。 リポジトリパターンとは: リポジトリは、データベースから取得したデータを構造体にマッピングし、ドメインオブジェクトにアクセスするためのインターフェースを提供します。 これは、一般的なリポジトリの理解と相違ないですね。次に DDDの文脈で、より詳しい定義をみ

                                                          DDDを実践するためのリポジトリ層の設計(Go言語による例)
                                                        • Go プログラミング言語仕様

                                                          Go プログラミング言語仕様 本文書は,The Go Programming Language Specification version 2021/02/10 のなんちゃって日本語訳である. 原文ソース:https://github.com/golang/go/blob/master/doc/go_spec.html 訳文ソース:https://github.com/hiwane/gospec-ja.誤訳・誤字脱字などは issue かプルリクで https://hiwane.github.io/gospec-ja/ 訳注 valid/invalid は有効/無効, legal/illegal は正当/不当と訳す. letter と character を区別するため,letter は英字,character は文字と訳す. signed/unsigned 符号付き,符号なし sourc

                                                          • APIシナリオテストの新ツールrunn

                                                            runn is 何? 3行まとめ 今回はAPIシナリオテストツールのrunnをプロジェクトに導入し、一部機能のコントリビュートしながら3ヶ月間触ってみておすすめだと感じたことを記事にまとめたいと思います。 runnとの出会い 4ヶ月ほど前にスキーマ駆動開発を行っているプロジェクトでいい感じのAPIのテストをしようと色々 調査 をしていました。 その当時はOpenAPIでスキーマ定義してswagger-uiからポチポチ手動テストをしていましたが、APIの数も増えるし同じAPIでもパターンが結構あり、流石に手動でのテストでは限界があるなーと考えていました。 パラメータ数も多いのでControllerテストで書くにしてもコード量が多く、レビューが辛いと感じていました。 APIをE2Eでテストしたい、最終的にはCIで自動テストまでもっていきたいと思いました。 しかし、いざ調べてみると案外ニーズにマ

                                                              APIシナリオテストの新ツールrunn
                                                            • 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
                                                              • Go 製 CLI にプラグイン機構を作る方法n選

                                                                package main import "plugin" func main() { p, err := plugin.Open("plugin.so") // error handling f, err := p.Lookup("F") // error handling f.(func())() // prints "Hello, world" } この標準の plugin パッケージについて、先程あげた評価項目がどうかを考えてみます。 User Experience : いまいち プラグインをインストールの仕組みを考えないと難しそう 利用者は、ツール側が規定したルールに従って.soを配置する必要があるというのがポイント ありそうな仕組み ツールにプラグインの URL を渡すとダウンロードして適切な場所に配置してくれる プラグインのレジストリを提供する プラグインがいい感じにインストー

                                                                  Go 製 CLI にプラグイン機構を作る方法n選
                                                                • 人生を豊かにする文字列diff入門 | フューチャー技術ブログ

                                                                  春の入門祭りの8日目です。 文字列の新旧の違いを表現する時によくdiffをとるとか言いますよね。そこで実行されるのが差分アルゴリズムです。差分のアルゴリズムって結構知れば知るほど難しいやつです。「より良い差分」という基準が、状況によって変わるからです。ヒューリスティックなやつです。例えば、HTMLの説明の文章を書いていたとします。タイトルをテーブルに書き換えてみたとします。 どちらも間違ってはおらず、この差分を元にパッチを当てたりも可能です。ただ、読んだ時の読みやすさが違います。 これはもちろん前者と答える人の方が多いでしょう。だって、タグという意味の塊が維持されていますからね。 これは究極的にはわかりやすいdiffというのは「意味」を理解しないと作れないということを意味します。これがdiffは簡単なようで難しいと書いた理由です。もちろん、ほどほどの工数で、ほどほどの見た目のdiffも作成

                                                                    人生を豊かにする文字列diff入門 | フューチャー技術ブログ
                                                                  • gRPC Streaming によるスケーラブルな常時接続型 API の構築

                                                                    常時接続型 API を構築するとき、 Go + gRPC Streaming はパフォーマンスに優れる有力な選択肢となります。しかしながら常時接続ゆえ、通常通信時間が短時間で終了する Web API とは異なる注意点があります。そこで本セッションでは、gRPC Streaming の紹介にはじまり、注意点やハマりポイントをご紹介します。また、GKE 上でオートスケールするオートモーティブ移動体情報配信システムを構築した事例をご紹介します。

                                                                      gRPC Streaming によるスケーラブルな常時接続型 API の構築
                                                                    • GoでオススメのWebフレームワークを聞かれたら

                                                                      なぜWebフレームワークが必要とするのか Webフレームワークを使った開発が当たり前であるプログラミング言語はたくさんあります。GoはどちらかというとWebフレームワークはいらないんじゃない?と言われることが多く、そう言われると初学者はいきなり難しいことをさせるなと思うかもしれません。 確かにフレームワークがあることでWebアプリが作りやすくなることがあるかもしれません。テンプレート通りに作れば作りたいものができるという体験はプログラミング言語を学び始めたばかりであれば重要です。フレームワークの枠に収まる開発であれば効果を発揮します。 しかし、「GoでオススメのWebフレームワークはありますか?」って聞かれる場合の多くは、Webアプリはフレームワークがないと開発できない、またはそうするのが当然だと思って質問している場合も多く見かけます。○○env系のツールと同様に、特に理由は無いけどそうい

                                                                        GoでオススメのWebフレームワークを聞かれたら
                                                                      • 接続が途切れないストリーミングサーバの無停止アップデートを実装してみました - Mirrativ Tech Blog

                                                                        こんにちは ハタです。 最近 SO_REUSEADDR / SO_REUSEPORT を使ったストリーミング配信サーバの無停止アップデート(Hot Deploy)を実装してみたので紹介したいなと思います ことの経緯 HTTPサーバによる Hot Deploy の仕組み ストリーミング配信サーバへの応用 SO_REUSEADDR/SO_REUSEPORT を使った実装例 Hot Deploy の組み込み Hot Deploy 実装時に気をつけたこと その後 We are hiring! ことの経緯 ミラティブでは以前から何度か紹介したとおり自前の配信基盤設備を持っています。 配信基盤のミドルウェアも内製であり、機能追加やライブラリの更新などがあるたびにミドルウェアのバージョンアップ作業(メンテナンス)も自社で実施しています ストリーミング配信サーバといっても、何か特別な事はなく一般的なHTT

                                                                          接続が途切れないストリーミングサーバの無停止アップデートを実装してみました - Mirrativ Tech Blog
                                                                        • GOPATH に(可能な限り)依存しない Go 開発環境(Go 1.15 版)

                                                                          2018 年ごろまでの Go に対する不満として以下のようなものがありました。 $GOPATH/src 配下でしか開発できない これは、import された package の探索先として $GOPATH/src が使用されていたことに起因します。 つまりどこかから呼び出される package を書きたい場合は $GOPATH/src 配下に存在しなければ探索できない、そのため実質 $GOPATH/src 配下でしか開発できないということでした。 しかし 2018 年末にリリースされた Go 1.11 によりこの不満は解決されることとなります。 Go 1.11 で導入された Go modules という新たな仕組みを有効にしておくと package 探索先として $GOPATH/src が使わなくなったのです。 その代わりに例えば github.com/go-sql-driver/mysq

                                                                            GOPATH に(可能な限り)依存しない Go 開発環境(Go 1.15 版)
                                                                          • OpenCV, GoCV, Go言語における画像処理のパフォーマンスの比較 - ZOZO TECH BLOG

                                                                            Gopher's design for Ryuta Tezuka(@Tzone99) こんにちは、ZOZOテクノロジーズ開発部の池田(@ikeponsu)です。 本記事では、 Go言語における画像処理の可能性を、ベンチマークを通して探ってみたいと思います。 はじめに 業務内でGo言語での画像処理を行う機会があり、Goの標準パッケージやGoCVについて調べていました。 ただ、画像処理に関する記述はまだまだ少なく、実装している人自体も少ないのかなという印象でした。 今回行った「Go言語での画像処理の速度はどの程度か」のベンチマークが、これからGo言語で画像処理の実装を行おうとしている方の参考になればと思います。 ベンチマークの内容 比較対象 C++のOpenCV内のバイリニア補間 GoCV内のバイリニア補間 Go言語とimageパッケージを使って実装したバイリニア補間 処理内容 画像入出力 バ

                                                                              OpenCV, GoCV, Go言語における画像処理のパフォーマンスの比較 - ZOZO TECH BLOG
                                                                            • goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ

                                                                              【Unit4 ブログリレー6日目】 こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 最近まで開発していたm3ラウンジでは、goからRDBを利用していました。 m3ラウンジでは、SQLの組みやすさやテストのしやすさの観点で検討した結果、goquを採用しましたので、 そこで得られた知見とその実装例を紹介します。 これから試してみる方(と将来m3ラウンジの開発に新たに入ることになったメンバー)の参考になるように、サンプルコードも説明も多くなってしまいかなり長いです。 お時間ある時にお読みいただければ。 名古屋城は、日本の城のひとつ。尾張国愛知郡名古屋(現在の愛知県名古屋市中区本丸・北区名城)にある。本文には特に関係ありません。 m3ラウンジ goqu 実例 modelの構造体 mapper mapperの実装 goquのSQLの結果から構造体へのマッピング

                                                                                goquを駆使してgoでSQL構築も構造体マッピングもRDBテストもやる - エムスリーテックブログ
                                                                              • Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog

                                                                                はじめに こんにちは!Google Cloudでオブザーバビリティの担当をしているものです。CVE-2021-44228のおかげでバタバタしていますがみなさんはお元気ですか? このエントリーはpyspa Advent Calendar 2021の15日目の記事です。昨日は @moriyoshit さんの「Goのロギングライブラリ 2021年冬」でした。めちゃめちゃ調べてあって良い記事でした。Goでログライブラリの選定をする際にはこちらをまず読むと良さそうです。 2021.12.21 追記: 穴が空いていたのでGo Advent Calendar 2021 その1の14日目の記事にもしました。 さて、今日は本当は「Goならわかる確定申告第三表」という記事を書こうと思ったのですが、まだ確定申告の時期ではないのでそれは辞めにします。そのかわり、今日はGo 1.18がめでたくベータ版リリースとなっ

                                                                                  Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog
                                                                                • I'm porting tsc to Go

                                                                                  I’m porting the TypeScript Type Checker tsc to Go, and not Rust. As the creator of SWC, an extensible Rust platform, this might sound strange. Let me explain. Why port tsc?# As TypeScript continues to rise in adoption, large projects are facing a dilemma: type checking is one of the slowest parts of their workflow. Developers want type safety without the tradeoff of slower iteration cycles. The Ty

                                                                                    I'm porting tsc to Go