タグ

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

タグの絞り込みを解除

Golangに関するmapk0yのブックマーク (1,117)

  • GitHub - terrastruct/d2: D2 is a modern diagram scripting language that turns text to diagrams.

    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 - terrastruct/d2: D2 is a modern diagram scripting language that turns text to diagrams.
  • Making a Go program run 1.7x faster with a one character change • Harry Marr

    If you read the title and thought “well, you were probably just doing something silly beforehand”, you’re right! But what is programming if not an exercise in making silly mistakes? Tracking down silly mistakes is where all the fun is to be had! I’ll also state the usual benchmarking caveat up front: the 1.7x speedup was measured while running the program on my data on my computer, so take that nu

  • Go Style

    Documents The Style Guide outlines the foundation of Go style at Google. This document is definitive and is used as the basis for the recommendations in Style Decisions and Best Practices. Style Decisions is a more verbose document that summarizes decisions on specific style points and discusses the reasoning behind the decisions where appropriate. These decisions may occasionally change based on

  • Goで書くテスタブルなCLIツールの作り方 | gihyo.jp

    CLIツールをテストする難しさ ターミナルなどで動作するCLI(コマンドラインインタフェース)ツールは、パッケージを公開して利用してもらうライブラリと比べてテストがしにくいと感じる読者も多いでしょう。 CLIツールは、ファイル/標準入力からの入力や、ファイル/標準出力/標準エラー出力への出力があることが多いです。また、コマンドライン引数やオプション(フラグ)によって変わる挙動のパターンが多いため、網羅的なテストが大変です。 入出力についても単一のファイルを読み書きするだけではなく、ディレクトリごと作成したり、特定のディレクトリ以下を再帰的に読み込むような処理もよくあります。 main関数にすべての処理をすべて書くような作りのCLIツールだと、実際にビルドしてテストスクリプトなどから動かしてテストするしかありません。しかし、せっかくCLIツールをGoで書いているのであれば、テストもGoで書き

    Goで書くテスタブルなCLIツールの作り方 | gihyo.jp
    mapk0y
    mapk0y 2022/11/17
    golden 最高なのでは
  • ko を使用して Go アプリケーションを Cloud Run に迅速にデプロイ | Google Cloud 公式ブログ

    ※この投稿は米国時間 2021 年 2 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。 開発者がコンテナを使用して作業することが多くなるに従い、ソースコードからアプリケーションがデプロイされるまでの時間を短縮することの重要性が増しています。コンテナ イメージのビルドをより迅速かつ容易にするため、Google は Cloud Build、ko、Jib、Nixery などのテクノロジーを開発し、クラウドネイティブの Buildpacks のサポートを追加しました。これらのツールのいくつかは、Docker エンジンや Dockerfile を使用せず、ソースコードから直接コンテナ イメージをビルドすることに特にフォーカスしています。 特に Go プログラミング言語を使用すると、ソースコードからコンテナ イメージをビルドすることがはるかに簡単になります。この記事で

    ko を使用して Go アプリケーションを Cloud Run に迅速にデプロイ | Google Cloud 公式ブログ
  • CI/CD も Go で書いてみた

    この記事の内容は 2022/12/20 現在、かなり古くなっています。 v0.4.1 時点での使い方について記事を書き直しましたので、こちらをご参照ください。 Dagger Go SDK でポータブルな CI/CD パイプラインを構築する Dagger が Go SDK を発表しました 🎉 Dagger を使うことでローカルマシン、 CI ランナー、専用サーバー、その他任意のコンテナホスティングサービス上などで実行可能な CI/CD パイプラインを構築することができます。 以前「インフラもバックエンドもフロントエンドGo で書いてみた」という記事を公開したのですが、 Dagger Go SDK ができたことで CI/CD までもが Go で書けるようになったので書いてみました。 インフラ・バックエンド・フロントエンドの方に関しては下記の記事をご参照ください。 作ったもの GoGoGo

    CI/CD も Go で書いてみた
  • CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ

    はじめにTechnogoly Innovation Group 辻です。 システム間のデータ連携として、他システムが出力した CSV ファイルを Go で読み込んでリレーショナルデータベースにファイルのデータを保存する、という処理がありました。CSV の値をデコードしたあとに共通的な処理を差し込みたいユースケースで Decorator パターンを使って実装をしました。コードベースをシンプルに保ちつつ共通処理をフックできます。実用的なユースケースで Decorator パターンを紹介する記事は少ないと思ったので、記事を書きました。 まず Decorator パターンが必要になった背景を説明したあとに具体的な Go の実装を見ていきます。 背景他システムが出力した CSV ファイルを Go でデコードして、PostgreSQL にデータを投入するような処理がありました。簡略化したイメージは以

    CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ
  • dockertest のススメ

    追記: 2024-07-20 Testcontainers を使いましょう。 概要 dockertest は go でテストを書く際に docker 経由で指定したコンテナを起動してくれてテストが終わったらコンテナを削除してくれる便利ライブラリです。 モチベーション 時雨堂では TimescaleDB という PostgreSQL に TSDB 拡張を追加した少し変わった RDBMS を利用しています。 TimescaleDB 専用の関数があったりするため、モックなどを使わずにテストを書くのが現実的です。 dockertest ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal wo

    dockertest のススメ
  • Big Sky :: errors.Join が入った。

    errors, fmt: add support for wrapping multiple errors · golang/go@4a0a2b3 · GitHub An error which implements an "Unwrap() []error" method wraps all the non-nil errors in the returned ... https://github.com/golang/go/commit/4a0a2b33dfa3c99250efa222439f2c27d6780e4a Go でエラーを扱う際に、複数のエラーを束ねたい事があります。例えば複数のタスクを実行し、1つでもエラーになれば中断するのではなく、一通りタスクを実施し終えた結果を返したい様なニーズです。 package main import ( "errors" "log" "os"

    Big Sky :: errors.Join が入った。
  • これまでとこれからのGo | gihyo.jp

    Go歴史 連載では、筆者(tenntenn)と周囲のGoエンジニアで、Goに関わる今アツい話を取り上げていきます。最新のGoの機能やこれからリリースされるGoの機能はもちろん、実際の開発現場で用いられているノウハウや自作ライブラリやツールについてご紹介します。第1回目はtenntennがこれまでとこれからのGoについて取り上げます。 Goは2009年にGoogleによって公開されたプログラミング言語です。2012年にGo1として正式公開されました。2022年現在では、GoogleNetflixをはじめとする海外企業だけはなく、筆者の所属するメルカリなど国内の企業でも多く用いられるようになってきました。海外Goの導入事例は公式サイトのケーススタディで確認できます。国内企業の導入事例はGoの公式Wikiに掲載があります。これらを見るとスタートアップからメガベンチャー、大企業までさまざま

    これまでとこれからのGo | gihyo.jp
  • Sentry で Go 製アプリケーションのエラーを楽に管理する - JX通信社エンジニアブログ

    *1 こんにちは、サーバーサイドエンジニアの @kimihiro_n です。 今回はSentryというエラー集約管理システムをGo言語で扱う場合の知見を共有したいと思います。 Sentry とは Sentryはエラーの集約管理を行うためのシステムで、作成したアプリケーション内で発生したエラーを一括で収集して見やすく管理することができます。 sentry.io 類似のエラーをグルーピングして発生頻度を確認したり、エラーの発生状況をSlackのようなチャットツールに通知してくれたりします。 予期しないエラーが発生したとき、生のログを見なくてもSlackやWebのUIで確認出来るのはとても便利です。 バックエンドからフロントエンドまで幅広い言語に対応しているためシステムのエラーを一括で集約が可能です。 JX通信社ではエラー管理ツールとしてSentryを広く利用しており100を超えるシステムが登録

    Sentry で Go 製アプリケーションのエラーを楽に管理する - JX通信社エンジニアブログ
  • 良い加減Goでmysqlに接続するときにDSNを直書きするのはやめない?

    よく見るDB接続例 Go言語を用いてmysqlに接続する際、DBの情報を文字列で直書きしているケースを良くみる import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main(){ db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/db?charset=utf8&parseTime=true") // 以下省略 } import ( "database/sql" "time" "github.com/go-sql-driver/mysql" ) func connectDB() *sql.DB { jst, err := time.LoadLocation("Asia/Tokyo") if err != nil { // エラーハンドリ

    良い加減Goでmysqlに接続するときにDSNを直書きするのはやめない?
  • 即席負荷試験ツールを実装するためのライブラリを作りました

    モチベーション 世の中には様々な負荷試験ツールがあり、それらは大概シナリオを組めたり複数ノードからリクエストを送れたりと高機能です。無論それは素晴らしいことなのですが 新しく実装したAPIで目標RPSを達しているかざっくり確認したい インデックスの追加前後でパフォーマンスに大きな影響が出ないか見てみたい 等といったシンプルな要件においてはセットアップ諸々の手間を考慮すると少々億劫な面があると思います。かといって自分で即席ツールを実装しようとすると 試験パラメーター取得処理 パフォーマンスを意識した実装 並行処理の排他制御 統計情報の出力 等々地味に面倒な実装が多くこちらもそれなりの労力を要します。或いはもっと簡便な試験ツールを使おうとすると微妙に痒いところに手が届かなかったりもするでしょう。 こうしたケースで簡単に負荷試験ツールを実装できるライブラリがあればもっと気軽に負荷試験を行え便利な

    即席負荷試験ツールを実装するためのライブラリを作りました
  • 至高のGoプラグイン用ツールを作った - knqyf263's blog

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

    至高のGoプラグイン用ツールを作った - knqyf263's 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選
  • Go1.19に採用されたPattern-defeating Quicksortの紹介 - エムスリーテックブログ

    エムスリーエンジニアリンググループ AI機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。 最近、Go1.19でsortパッケージのアルゴリズムが一部変更されました。 Pattern-defeating Quicksortが入った時のdiff 1.19リリースノートではPattern-defeating Quicksortが採用されたと紹介があります。実際にsort/zsortfunc.go、sort/zsortinterface.goにそれぞれpdqsort_func、pdqsortという関数があります。 // pdqsort sorts data[a:b]. // The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizati

    Go1.19に採用されたPattern-defeating Quicksortの紹介 - エムスリーテックブログ
  • S3 on LocalStackをGoとFUSEを使ってMountする(WSL2) | フューチャー技術ブログ

    はじめにTIG DXユニットの真野です。夏休み自由研究連載の5目です。 ずっと気になっていた、go-fuseを用いて、LocalStack でローカル環境にエミュレートされるS3バケットをマウントするツールを開発しました。普段はWebのAPIサーバを中心に開発しているので、FUSEとはいえファイルシステムの知識が無く、トライ&エラーの連続ですごく楽しい自由研究(工作)でした。 モチベーションは以下です。 業務でよくS3にアクセスするコードを書き、ローカル開発ではLocalStack上のS3を用いてテストしている LocalStack上のS3に事前データを置いたり、事後データの検証にいちいちアクセスコードを書くのが面倒 実装ミスで予期しない階層にファイルを出力してしまったりするときに、容易に視認できるようにしたい aws cliコマンドを叩けば良いけど、コマンドを覚えられないし手間がある

    S3 on LocalStackをGoとFUSEを使ってMountする(WSL2) | フューチャー技術ブログ
  • Go言語でJSONをYAMLに変換するコマンド json2yaml を作りました! - プログラムモグモグ

    JSONをYAMLに変換するコマンド json2yaml を、Go言語で作ってみました。 他の言語も含めると同じようなコマンドラインツールは無数に作られていますが、 Goのライブラリとして組み込みたかったというのが最初のモチベーションです。 また、JSONをストリーミング的にYAMLに変換できるのかという疑問を以前から抱いていて、ここに答えを得たかったというところもありました。 github.com go install github.com/itchyny/json2yaml/cmd/json2yaml@latest Homebrewでもインストールできます。 brew install itchyny/tap/json2yaml JSONファイルを引数にしてYAMLを出力したり、 $ cat sample.json { "Sample": "JSON" } $ json2yaml sam

    Go言語でJSONをYAMLに変換するコマンド json2yaml を作りました! - プログラムモグモグ
  • GORM で出力されるログの SQL と実行される SQL が違った話 - カミナシ エンジニアブログ

    7月に株式会社カミナシに入社したくらさわです! カミナシでは、現場DXプラットフォーム「カミナシ」の開発をしています! よろしくお願いします!!! きっかけ 検証バージョン 結論 コード書いて確認してみた ドキュメント読んでみた コード読んでみた go-sql-driver/mysql のコード GORM のコード まとめ きっかけ 現在、カミナシの開発では、サーバサイドの言語は Go 、ORマッパーとして 「GORM」 を使い、DB には Amazon Aurora MySQL を使っています。 ある日、開発中に GORM が吐いてくれるログで query を調べていると、アプリケーションの実行中は結果が取れていないのに、その query をコピーして、手動で MySQL に投げると結果が取得できるということがありました。 パッとわからなかったので、それについて調べたことを記事にしてみま

    GORM で出力されるログの SQL と実行される SQL が違った話 - カミナシ エンジニアブログ
  • Goのfmt.Printfの幅と精度は引数で指定できる

    幅と精度とは Goの標準ライブラリであるfmtパッケージでは、fmt.Printf関数やfmt.Sprintf関数など、書式を指定して表示や文字列を生成する関数が提供されています。Go1.19では、バイト列([]byte型)を生成するfmt.Appendf関数も追加されました。 書式の中では、%dや%sのようにverbを指定して、表示方法(文字列の組み立て方)を指定します。%2dや%2.3fのように、幅や精度を指定ができることはCのprintf関数と似た機能なのでよく知ってる方も多いでしょう[1]。 幅と精度を引数で指定する 幅と精度は、実は引数で指定できます。頑張ってfmt.Sprintf("%%%dd", width)のように書式文字列を生成する必要はありません。幅や精度に*と記述すると引数で値を指定できます。 たとえば、幅の場合は次のように書けます。

    Goのfmt.Printfの幅と精度は引数で指定できる