タグ

goに関するfbisのブックマーク (110)

  • Golang の Generics で使いたいものは大体 samber/lo にあった話 - Qiita

    はじめに 記事は Go Advent Calendar 2022 の18日目の記事です。 Generics を使った関数でやりたかったことが、samber/lo に大体揃ってたという話をします。 すでに自前で書いてた関数もいくつかあったのですが、このライブラリを知り置き換えていったという体験談です。 ※結果的に「samber/lo のなかでこの辺り使えるかも」というものを私の独断と偏見でピックアップする記事になってます。 samber/lo とは samber/lo は 16日目のアベンドカレンダーの記事 でも取り上げられていまして、そこから説明を引用させていただきました。 samber/loは,多種多様な便利関数を提供するパッケージです。 JavaScriptのライブラリのLodashライクであるとREADMEにも記載があります。 個人的には大好きなパッケージでして,Map,Filte

    Golang の Generics で使いたいものは大体 samber/lo にあった話 - Qiita
    fbis
    fbis 2023/08/08
  • 改行コードを含んだ文字列を環境変数で読み込むときに嵌った話

    追記 2018/05/03twitter で指摘してもらいましたが、シェルだと改行して読み込ませればいけるとのこと ``` HOGE="Hello World" go run main.go ``` ではダメですか? https://t.co/nkpPkIvlLw — Ichinose Shogo (@shogo82148) 2018年5月2日あー試してないな ただ今回は書いてないのであれだけどAWS Lambdaで設定した環境変数を取りたかったのでこうした感じです — こんぼい。 (@Konboi) 2018年5月2日なるほど。確かにコンソールだと一行テキスト… シェルだと上手く行きます。 — Ichinose Shogo (@shogo82148) 2018年5月2日やはりコンテキストも含めて書かないと誤解を招くな。 反省 よく考えれば当たり前だなーと思ったけど嵌ったので戒めもこめてメ

    fbis
    fbis 2023/08/07
  • sign package - github.com/aws/aws-sdk-go-v2/feature/cloudfront/sign - Go Packages

  • ITエンジニア向けのトレンド情報 | Forkwell Press (フォークウェルプレス)

    まずはGo言語の基礎をおさらいしていきましょう。 Go言語は、Googleと世界的エンジニアが共同開発した言語 Go言語は、Googleによってプログラミング環境を改善する目的で開発されました。この開発には、C言語を設計した世界的なエンジニアが携わっています。 Kenneth Lane Thompson (Ken Thompson)…… UNIX開発者  / C言語 発案者 Robert C Pike(Rob Pike)…… UNIX開発者  / UTF-8 発案者 Robert Griesemer …… 高速 JavaScript エンジン V8 開発者

    ITエンジニア向けのトレンド情報 | Forkwell Press (フォークウェルプレス)
    fbis
    fbis 2023/08/05
  • 【Go Dependencies コマンド】go install,go get,go mod download,go mod tidy

    Go Dependencies コマンド】go install,go get,go mod download,go mod tidy Goの開発をする際に、外部のモジュールやパッケージが必要になることが多いです。 Goにはモジュールやパッケージをダウンロード、インストールするためのコマンドが多く用意されていて、それぞれの振る舞いの違いや用途について理解するのに苦労しました。 記事では、私が普段使うコマンドを列挙し、振る舞いや用途について言及していけたらと思います。 前提 Go Modulesに関するコマンドはGoのバージョンに大きく依存するため、バージョンには注意する必要があります 記事はGo 1.19を対象としています go get <package-name> go getはgo.modファイルに記載された依存関係を更新し、go.modファイルを更新します この過程で、指定したパ

    【Go Dependencies コマンド】go install,go get,go mod download,go mod tidy
  • 🪵 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パッケージ超入門
    fbis
    fbis 2023/07/02
  • Go言語のジェネリクス入門(2) インスタンス化と型推論

    はじめに 注意: 2023/06/08更新 Go1.21(順調なら2023年8月にリリース予定)において、型推論アルゴリズムの枠組みが新しくなります。 この記事の多くの内容は古いものとなります。 更新予定は今のところないので、注意書きを記載しておきます。 ↑の変更のポイントだけ筆者なりにまとめておくと、関数引数型推論と制約型推論との間の順序の関係がなくなることと、順序の関係がなくなることによって型推論に使える情報の種類を増やしやすくなることがポイントです。 注意 この記事はGo1.18リリース前に書いたのですが、そのせいでGo1.18以降で動作しなくなっているサンプルコードがあります。 具体的には、Go1.18リリース時点では「パラメータ化された型」にたいする型推論が行われなくなりました。そのため、このような型推論についてのサンプルコードが動作しなくなっています。 型推論アルゴリズム自体は

    Go言語のジェネリクス入門(2) インスタンス化と型推論
  • golangci-lint に搭載されている linter を学ぶ

    golangci-lint に搭載されている linter を学ぶ
    fbis
    fbis 2023/06/14
  • 無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ

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

    無理なく始めるGoでのユニットテスト並行化 - カンムテックブログ
    fbis
    fbis 2023/06/03
  • Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング

    はじめに メルペイ エキスパートチームのtenntennです。 メルカリグループでは、毎週金曜日にGo Fridayという社内勉強会を開催しています。 毎週やっているとそれなりに知見が溜まってくるので、定期的に”こぼれ話”としてブログを書こうという話になりました。 今回の記事では、先日のGo Fridayで話題にあがった非公開な機能を使ったテストについて扱いたいと思います。 なお、Goにおけるテストの手法やテストしやすいコードの書き方については、GopherCon 2017でも発表があったmitchellhさんの”Advanced Testing with Go”(スライド/動画)が参考になります。テーブル駆動テストやテストヘルパーなど非常に勉強になるので、まだ見たことのない方はぜひスライドや動画をご覧ください。 TL;DR Goのテストではテスト対象とテストコードを別パッケージにできる

    Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング
    fbis
    fbis 2023/06/01
  • how to mock callback · Issue #216 · golang/mock

    fbis
    fbis 2023/05/26
  • GOのORMを分かりやすくまとめてみた【GORM公式ドキュメントの焼き回し】 - Qiita

    はじめに GORMは公式ドキュメントがすごく良いのですが、途中から分かりづらかったり日語訳が途切れたりしていたので、自分の理解向上のついでに構成を分かりやすくし全て日語でまとめました。 よって、記事は公式ドキュメントの焼き回しになります。 前提知識 ORMとは何かくらいは知っている SQLの基知識 Goの基知識 インストール

    GOのORMを分かりやすくまとめてみた【GORM公式ドキュメントの焼き回し】 - Qiita
    fbis
    fbis 2023/05/22
  • Goとエラーハンドリング慣習について

    エラー返値が無用な条件 関数ないしメソッドの実装がオンメモリ操作のみで完結 将来も(メモリ以外の)I/O操作は追加されることがない 逆にいうと上記の条件のいずれかが達成できない可能性がある関数やメソッドはエラー返値を付与すべき。 返値エラー型はerrorで統一する 返すエラーがerrorインターフェース型でなければそのエラーは正常にハンドリングできません。またerrorインターフェースを満たす別の返値型で返してerrorインターフェース型で受け取るのも後述のトラブルの元です。 Goの実装方針に「インターフェースで利用するものもコンストラクター相当では構造体ポインタで返す」というものがありますがコンストラクタを呼ぶ側は元型にアクセスすることが多いのでこういう方針になっています。が、エラー値に関しては元型を意識せずに利用可能にするという役割があって、この実装方針は当てはまりません。 エラーチェ

    Goとエラーハンドリング慣習について
    fbis
    fbis 2023/05/21
  • Options

    fbis
    fbis 2023/05/16
    golint
  • Goメモ-157 (bytes.Bufferはとても便利) - いろいろ備忘録日記

    概要 サンプル ゼロ値で利用 文字列からbytes.Bufferを生成 バイト列からbytes.Bufferを生成 io.Readerとして利用 io.Writerとして利用 参考資料 概要 bytes.Buffer 使ってますか? Goではバイト列を扱うことが多いので、この型はとても便利です。 Goを始めたときは、使いにくいと感じていたのですが、慣れてくると、この子を一番使っている気がします。 文字列からバイト列にしたい バイト列から文字列にしたい io.Readerとして使いたい io.Writerとして使いたい などなどの時に利用できます。 io.Readerとしてもio.Writerとしても利用できるので、なにかの入力元にもなれるし出力先にもなれるということですね。 前にアップした devlights.hatenablog.com でも、頻繁に使っていますので参照ください。 サンプ

    Goメモ-157 (bytes.Bufferはとても便利) - いろいろ備忘録日記
    fbis
    fbis 2023/05/16
  • [Go] 構造体で、値メソッドとポインタメソッドを使い分ける - YoheiM .NET

    こんにちは、@yoheiMuneです。 前回(Goのポインタを学ぶ)に引き続き、今日はGo言語の構造体とポインタについて、ブログに書きたいと思います。 目次 構造体に振る舞いを追加する 下記のサンプルコードは、https://play.golang.org/p/B7pWW8dm8Oで試すことができます。 構造体にメソッドを追加することで、振る舞いを定義することができます。例えば以下のようなユーザーを表現する構造体があるとします。 type User struct { Name string } 以下のように、メソッドを追加することで「挨拶をする」振る舞いを定義することができます。 func (u User) Greeting(msg string) { fmt.Printf("%s by %s\n", msg, u.Name) } // 実行してみると user := User{ "Yoh

    [Go] 構造体で、値メソッドとポインタメソッドを使い分ける - YoheiM .NET
    fbis
    fbis 2023/05/10
  • GoのS3 ダウンロード処理で知っておくと良いこと - バックエンドパフォーマンス改善

    こんにちは、@igsr5 です。普段はある高専の情報科に通いながら、Wantedly, Inc. で長期インターンをしています。興味領域はフロント・バックエンド、インフラで、最近は業務でもっぱらGoを書いています。今回はGoのパフォーマンスチューニングの話です。 対象読者 aws-sdk-go(aws-sdk-go-v2)[1] で s3 ダウンロード処理のパフォーマンス改善を行いたい人 Go[2] の io パッケージの話に興味がある人 バックエンドのパフォーマンス改善に興味がある人 TL;DR 内部で s3 ダウンロードが行われるバックエンドAPI などを考えたとき、 // 1. Downloader の作成 downloader := s3manager.NewDownloader(sess, func(d *s3manager.Downloader) { // + ここを追加 d.

    GoのS3 ダウンロード処理で知っておくと良いこと - バックエンドパフォーマンス改善
    fbis
    fbis 2023/04/27
  • 改めて見直すGoの特徴

    極力Goならではな特徴をいくつか挙げていく。 依存解決が必要最低限で互換性を考慮しつつ決定的 モジュール単位で依存をダウンロード。コンパイル対象はサブパッケージ単位。 依存の明示方法はコードに埋め込まれ、かつ未参照のインポートはコンパイルエラー。 つまり動作するコードのすべては正確な依存ツリーが明示されていて余計な依存は引き込まれない。 そして持ち前のコンパイルの速さを含め、相当深い依存ツリーでも依存解決にかかる時間は既知の処理系の中でも最速レベル。(唯一勝てるのはプリビルドバイナリが配布されている場合くらい) また、コンパイルやリンクに必要な処理量そのものが比較的少ないため、開発環境負荷も小さい。 かなり巨大なプロジェクトであってもメモリ8GBで困るようなことが無い。つまり、CI環境の維持にもローコストで済む。 ライブラリの提供側では後方互換性が破壊されるような変更はV1->V2というよ

    改めて見直すGoの特徴
    fbis
    fbis 2023/04/26
  • Containerで動かすGoの常駐worker - nakamura244 blog

    前提 前のプロジェクトの時にAWS SQSのキューをポーリングして稼働するworkerをgoで作った時のお話になります。 goのworkerはcontainerで動かすといった感じです 課題 その時に課題だったのが、goのworkerを改修してリリースする時にcontainerを破棄して、新しく再構築します。 workerは常に稼働しているのでworkerが何か処理をしている時にOSレベルで破棄され、強制終了するとデータが不整合な状態になってしまうという課題があった sudo kill -SIGTERM 終了シグナルが送られた時、そのままworkerが終了してしまう事の弊害です 上位にLoad Balancerなるものがある場合は対応が楽になりますが、今回はポーリングしてるworkerなのでちょっと状況が異なります よくある形 常駐化の役割はsupervisorを活用するパターンがあります

    Containerで動かすGoの常駐worker - nakamura244 blog
    fbis
    fbis 2023/04/26
  • 一時的なファイル出力を伴うテストにtesting.TB.TempDir()が便利そう - podhmo's diary

    たまたまファイル出力を伴うようなコードを書いていて、これのテストにtesting.TB.TempDir()が使えることがわかったのでメモ。1.15から追加されていた模様。 便利なのは自動でcleanupされる点 使い方 例えば以下の様な処理があるとする。特に意味自体は無いが特定のディレクトリ以下の様なファイルを出力するような処理。 current/ ├── 1.txt // one ├── 2.txt // two └── 3.txt // three 0 directories, 3 files func Run(d string) error { } { f, err := os.Create(filepath.Join(d, "1.txt")) if err != nil { return err } fmt.Fprintln(f, "one") } { f, err := os.C

    一時的なファイル出力を伴うテストにtesting.TB.TempDir()が便利そう - podhmo's diary
    fbis
    fbis 2023/04/24