タグ

goに関するtjmtmmnkのブックマーク (48)

  • 至高のGoプラグイン用ツールを作った - knqyf263's blog

    最近YouTuberのリュウジの料理を毎日作っているので至高とか無限とか言いがちですが個人の感想です。万人にとって美味しい料理はないように、万人にとって至高のツールは存在しません(何の話?)。ちなみに公開してすぐバグを見つけてしまったので全然至高じゃありませんでした。 要約 概要 特徴 使い方 流れ 事前準備 インタフェースの定義 SDKの生成 プラグインの実装 ホストの実装 実行 発展 Host Functions ファイルアクセス その他 苦労した点 まとめ 要約 Goでプラグイン機構を実現するためのツールを作りました。Protocol Buffersのスキーマからコードを自動生成するので簡単にプラグイン機構を実現可能です。内部的にはWebAssemblyWasm)を使っています。最近はWasmはブラウザ外での利活用が進んでおり、今回のツールもブラウザは一切関係ないです。Wasmはサ

    至高のGoプラグイン用ツールを作った - knqyf263's blog
    tjmtmmnk
    tjmtmmnk 2022/08/31
  • How Go Mitigates Supply Chain Attacks - The Go Programming Language

    Filippo Valsorda 31 March 2022 Modern software engineering is collaborative, and based on reusing Open Source software. That exposes targets to supply chain attacks, where software projects are attacked by compromising their dependencies. Despite any process or technical measure, every dependency is unavoidably a trust relationship. However, the Go tooling and design help mitigate risk at various

    How Go Mitigates Supply Chain Attacks - The Go Programming Language
  • 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でジョブキューを実装した - オープンソースこねこね
    tjmtmmnk
    tjmtmmnk 2021/03/10
  • 結局、Go言語をやめる理由はなかった件 - Qiita

    この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま

    結局、Go言語をやめる理由はなかった件 - Qiita
  • Go言語を使って1年間が経った | Recruit Tech Blog

    はじめに これはRecruit Engineers Advent Calendar2日目の記事です。 昨年書いた記事より、1年が経ちました。 Go言語を用いて開発を行ったプロジェクトも無事にリリースを迎えることができました。ほぼ問題は発生しておらず、安定的な稼働を実現できています。 今回の記事では、1年前の記事を踏まえ、Goを用いてWebシステムのバックエンドを開発する上での振り返りを行いたいと思います。 全体アーキテクチャについて リクルートテクノロジーズではバックエンドとフロントエンドの疎結合を促進させ、より柔軟な設計と開発効率の向上を意図して、 Backends For Frontends(BFF) と呼ばれる層を設けています。 BFFについてはこの資料やこの連載が詳しいのですが、代表的なユースケースだと、 APIのAggregation(いわゆるAPI Gateway) Viewの

    Go言語を使って1年間が経った | Recruit Tech Blog
  • regexpとの付き合い方 〜 Go言語標準の正規表現ライブラリのパフォーマンスとアルゴリズム〜

    こんにちは! エンジニアの臼井です。 この記事は、 eureka Advent Calendar 2016 20日目の記事です。 昨日は、太田さんの angular-cliで始めるAngular2 という記事でした。 今日の記事では、Go言語標準の正規表現ライブラリ、 regexp についてお話します。 稿において使用するGo言語のバージョンは 1.7系とします。 regexp は遅い残念ながら regexp は、PHPRuby 等のメジャーなスクリプト言語の正規表現処理ライブラリと比較して、多くの利用ケースにおいて同等のパフォーマンスとなっています。 他の通常の処理において、Go言語のパフォーマンスは C++ など VM を必要としない実行ファイルを生成する言語と比肩するパフォーマンスがありますが、 regexp はスクリプト言語の正規表現処理と同等あるいはそれより劣る処理時間と

    regexpとの付き合い方 〜 Go言語標準の正規表現ライブラリのパフォーマンスとアルゴリズム〜
  • 埋め込みを他のパッケージから隠蔽する #golang - Qiita

    以下の記事にも書いているが,構造体型へ別の型を匿名フィールドとして埋め込む場合,型がパッケージ外に公開してあると,パッケージ外からその匿名フィールドにアクセスできてしまう. インタフェースの実装パターン たとえば,以下のようにHoge型に*Fuga型を埋め込んだ場合,Fuga型はパッケージ外に公開されているため,埋め込んだFuga型の値にもアクセスできてしまう.

    埋め込みを他のパッケージから隠蔽する #golang - Qiita
    tjmtmmnk
    tjmtmmnk 2020/12/14
  • Testable Examples in Go - The Go Programming Language

    Andrew Gerrand 7 May 2015 Introduction Godoc examples are snippets of Go code that are displayed as package documentation and that are verified by running them as tests. They can also be run by a user visiting the godoc web page for the package and clicking the associated “Run” button. Having executable documentation for a package guarantees that the information will not go out of date as the API

    Testable Examples in Go - The Go Programming Language
    tjmtmmnk
    tjmtmmnk 2020/12/13
  • Go のエラーハンドリング

    私が Go のエラーハンドリングについて最初に記事にしたのは2015年のことだが,あれから Go も少しずつ変わってるし,私も当時よりは多少なりと理解が進んだと思うので,今まで書いた駄文を「全部入り」での形にしてみようと思う。 主な内容: * エラー評価の基 * エラーの階層化 * サードパーティのパッケージ * ぼくがかんがえたさいきょうのえらーろぐ * Panic と Recover 寄付(サポート)歓迎。ご笑覧のほどを。

    Go のエラーハンドリング
    tjmtmmnk
    tjmtmmnk 2020/12/11
  • ★ Ultimate Guide to Go Variadic Funcs

    What is a variadic func?A variadic func accepts variable number of input values — zero or more. Ellipsis (three-dots) prefix in front of an input type makes a func variadic.

    ★ Ultimate Guide to Go Variadic Funcs
    tjmtmmnk
    tjmtmmnk 2020/12/11
    ... の使い方がまとまってる
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

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

    今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
    tjmtmmnk
    tjmtmmnk 2020/12/06
  • テストのためだけに`interface`を書きたくないでござる — KaoriYa

    golangでテストのためだけにinterfaceを書くのが死ぬほど嫌だったので編み出した技を紹介します。 TL;DR テスト(=mock)のためだけにinterfaceは切りたくない 型エイリアスとビルドタグを組み合わせるとinterfaceがなくてもモックが作れる この手法に必要なモックを自動生成するプログラムを作った interfaceは当に必要なシーンで使うべき Background 現在モックを使った単体テストは一般的です。 Javaでの例を挙げると、モックしたいコンポーネントについて予めinterfaceを定義しておき、モックではそのインターフェースを実装するのが定石です。 しかしgolangのinterfaceはJavaなどのそれとは若干性質が異なるため、テスト=モックのためだけにinterfaceを書くのはオーバーワーク気味です。 そうテストのためだけにinterface

    tjmtmmnk
    tjmtmmnk 2020/12/04
  • [Go] Defined type(Named type)とType aliasを使い分ける - My External Storage

    Goには既存の型に新しい名前をつける方法が2つある。 type MyType intと宣言するDefined type 以前はNamed typeと言っていたが、Go1.11からDefined typeと呼ぶようになった type MyType = intと宣言するType alias すでにいろいろ記事はあるものの、最近数回聞かれることがあったので改めてまとめておく。 Tl;DR Goには型に違う名前をつける方法がある。 Defined typeとType alias Defined typeを使うと完全に違う型として扱える プリミティブな型に異なる型名をつけたり、メソッドを生やすこともできる Value Object的な型を簡単に作ることができる Go1.10以前(書籍プログラミング言語Goなど)ではNamed typeと呼ばれている Type aliasを使うと異なる名前だが同じ型と

    [Go] Defined type(Named type)とType aliasを使い分ける - My External Storage
    tjmtmmnk
    tjmtmmnk 2020/12/04
  • Testing a function that calls a goroutine

  • Be Careful with Table Driven Tests and t.Parallel()

    go-table-driven-tests-parallel.md Be Careful with Table Driven Tests and t.Parallel() We Gophers, love table-driven-tests, it makes our unittesting structured, and makes it easy to add different test cases with ease. Let’s create our table driven test, for convenience, I chose to use t.Log as the test function. Notice that we don't have any assertion in this test, it is not needed to for the demon

    Be Careful with Table Driven Tests and t.Parallel()
  • Advanced Testing with Go

    This talk goes over the testing practices I've learned over the years of using Go and building tools at HashiCorp. The practices range from basic to adv…

    Advanced Testing with Go
  • Go の channel 処理パターン集 | Hori Blog

    Hori Blogフリーランスでバックエンドエンジニアとして活動している Ryota Hori のブログです。 最近はテック系記事より雑記ブログ気味。 この記事は Go Advent Calendar 2017 の 1 日目の記事です。 Go の長所に goroutine による非同期処理がありますが、どうしても channel の取り回しで黒魔術化しがちです。少しでも闇を減らしていきたいので、 channel らへんの取り回しについてパターンをまとめました。チートシート的に使えれば嬉しいです。 Go の channel の基礎 入門資料として使いたいので、題に入る前にざっくり基礎を。 定義のパターン channel には capacity という概念があります。 capacity は channel 内でバッファリングしておける容量のことで、 capacity に空きが無い場合は送信側

    Go の channel 処理パターン集 | Hori Blog
    tjmtmmnk
    tjmtmmnk 2020/11/29
  • Buffered Channels In Go — What Are They Good For?

    Post 3 in a Series on Go In a previous blog post we looked at how to build an unbounded channel, where writes to the channel would never block. It was built on top of two unbuffered channels, a goroutine, a slice, and a couple of closures. Notably missing was a buffered channel. Buffered channels never have unlimited buffers. Proper use of a buffered channel means that you must handle the case whe

    Buffered Channels In Go — What Are They Good For?
    tjmtmmnk
    tjmtmmnk 2020/11/29
  • Explain Type Assertions in Go

    Short answer In one line: x.(T) asserts that x is not nil and that the value stored in x is of type T. Why would I use them: to check x is nil to check what is the dynamic type held by interface x to extract the dynamic type from x What exactly they return: t := x.(T) => t is of type T; if x is nil, it panics. t,ok := x.(T) => if x is nil or not of type T => ok is false otherwise ok is true and t

    Explain Type Assertions in Go
    tjmtmmnk
    tjmtmmnk 2020/11/29
  • Go 脱初心者への道

    最近、 Go の学習を始めました。入門書や 公式のチュートリアル を終えてもなかなか解らないことをまとめてみました。 1. パッケージ作成・パッケージ管理 1. a. ディレクトリ構成は非公式ながら標準と目されるものがある(らしい) Standard Go Project Layout /cmd にmainのアプリケーションのソースを置きます。 /pkg にライブラリのソースを置きます。 /src にソースを置いてはいけません。 なお、このディレクトリ構成は go コマンド(go build 等)がデフォルトで認識するディレクトリ (/src , /pkg , /bin) とは全く異なるので注意が必要です。 2021-05-24 追記 このレイアウトは殆ど普及していないとのこと。また、リポジトリ名が「標準」を名乗るのは誤解を招くとのissueも挙がっています。 個人的な意見として、ライブラ

    Go 脱初心者への道
    tjmtmmnk
    tjmtmmnk 2020/10/20