タグ

golangに関するTomato-360のブックマーク (72)

  • 俺の管理画面 2023年冬 - KAYAC engineers' blog

    面白法人カヤック技術部の谷脇です。私は元気です。 この記事は面白法人グループ Advent Calendar 2023の5日目のエントリーです。 というわけでこの記事では、現環境(私が取り組んでいる業務のこと)ベストの管理画面の技術選択について考えたことを書き連ねていきます。 前提知識 管理画面の定義 ここで読者と私の目線を合わせるため、この記事上での管理画面の定義をしておきます。 管理画面はサービスの運営上必要な操作やデータの閲覧をまとめたWebアプリケーションです。また、このWebアプリケーションは一般ユーザーには開放されておらず、サービス運営者側のみ閲覧と操作が可能となっている、とします。 管理画面を作る動機 ここではTonamelの管理画面について、考えて導入したことを書きます。 tonamel.com Tonamelはゲーム大会やイベントを開催するためのプラットフォームです。We

    俺の管理画面 2023年冬 - KAYAC engineers' blog
    Tomato-360
    Tomato-360 2023/12/08
    これはけっこう良さそう
  • ngrok blog: Introducing ngrok-go: Ingress to Your Go Apps as a net.Listener

    Today, we're excited to announce ngrok-go, our idiomatic Go package for embedding secure ingress directly into your Go applications. If you’ve used ngrok before, you can think of ngrok-go as the ngrok agent packaged as a Go library.

    ngrok blog: Introducing ngrok-go: Ingress to Your Go Apps as a net.Listener
  • GolangにおけるGenericsについて考えながらGoらしさについて考えてみる - キチログ

    tl;dr Go 2 Draft が発表され、その中にはgenericsの機能追加が検討されています。この機会にジェネリクスとは何かについて考えてみたい。 以前はJavaを書いていて、当時使いながら便利だなあと感じていた。 けど、いわば抽象化テクニックであるgenericsを多用するとコードの可読性は著しく下がります。 そして、これが「Golang」というプログラミング言語の思想として正しい方向に向かうのかということもこっそり考えてみたい。 Golangでジェネリクスを使いたい 現状はできない。 interface{} を使って強引に書くことはできるが、結果的には不完全な実装になる。これについては、あとでコードを紹介します。 genericsの使い所と勘所 よくある、というかもしgenericsがあったとしたら真っ先に思いつくのがリスト操作。じゃないですか? 例えば、mapとかkeysとか

    GolangにおけるGenericsについて考えながらGoらしさについて考えてみる - キチログ
    Tomato-360
    Tomato-360 2021/08/17
    interfaceだらけだと何が辛いのか。Genericsがあるとどううれしいのか。
  • GoのAPIが厳格でない訳

    Windows対応の曖昧なAPIを非難する記事 この記事はGoが曖昧に扱うAPIについて非難していて、より厳格に扱うことのメリットを解説しています。 Goのこれらの指摘の挙動が実際にどの様なものかを解説していきます。 無視する挙動 Goの標準ライブラリのAPIはどちらかというとUnix/Posixに寄せていて、一部のWindowsに無い概念に関する処理(ファイルのパーミッション操作など)は黙って無視したりする。 これはUnix/Posix用の実装が同じソースコードのままWindowsでも動作するために必要なダミーです。ここでそのようなダミー実装をアプリケーション作成側の責任にすると実装やテストが大変面倒になってしまう。 逆に、GoではUnix/Posixにあるforkやthreadに関するAPIをサポートしません。特にforkというAPIWindowsには全くない概念であり、互換性を取る

    GoのAPIが厳格でない訳
  • GoのORM「ent」の話

    こんにちは。 最近、とある人が「goって簡単だと聞きました。」と言っていて、別の人が「いや、違くてgosimpleだけど、easyではないよ」と言っていたのを聞いて、ああ、言い得て妙だなと思ったmasamikiです。 GoORM これまで、GoORM使うならGORMばっかり使ってきたのですが、今回、新しいプロジェクトをやるにあたり、風の噂で聞いていた ent を使うことになりました。 これは、そんなentのお話。 GORM GORMはThe fantastic ORM library for Golangとかかれている通り、Go言語のためのファンタスティックなORMライブラリです。 Migratorを使ってMigrationの処理を書いたり、

    GoのORM「ent」の話
  • 【Golang】Github actionsでカバレッジを取得しCodecovにアップロードする - Simple minds think alike

    Go言語で作ったアプリケーションのGithubリポジトリでGithub actionsワークフローを設定し、 codecov にカバレッジを送る設定方法を紹介したいと思います。 codecov は、テストのコードカバレッジを取得してくれるツールです。テストスイートを実行した時にソースコードの実行箇所を視覚的に示してくれて、どこに新しいテストを書くべきか分かりやすくなります。 緑: テストスイートによってソースコードが実行されている箇所 黄: テストスイートによってソースコードが部分的に実行されている箇所(具体的には、真偽値が返るところで、 true か false のどちらかしか返っていない箇所) 赤: テストスイートによってソースコードが実行されていない箇所 忙しい時はテストコードを書くのが手抜きになったりするのですが、 codecov を使っているとカバレッジが定量的・視覚的に表現され

    【Golang】Github actionsでカバレッジを取得しCodecovにアップロードする - Simple minds think alike
  • Goで複数パッケージ構成のプロジェクトでもちゃんとカバレッジ集計する(GitLab編) - くりにっき

    tl;dr; Goで複数パッケージ構成の場合何が問題か? GitHubの場合 GitLabの場合 題:GitLabで複数パッケージ構成のGoプロジェクトのカバレッジを集計したい .gitlab-ci.ymlのサンプル tl;dr; gcov + lcovが無難 Goで複数パッケージ構成の場合何が問題か? Goでテストを実行する時に -cover をつけるとお手軽にカバレッジが集計できるのですが、1パッケージずつしか出力されないので複数パッケージ構成のプロジェクトの時にプロジェクト全体のカバレッジが集計できずに困ります。*1 $ go test -count=1 -cover ./... ok gitlab.com/sue445/tanuki_reminder 0.066s coverage: 77.2% of statements ok gitlab.com/sue445/tanuki_

    Goで複数パッケージ構成のプロジェクトでもちゃんとカバレッジ集計する(GitLab編) - くりにっき
  • Golangで複数パッケージをまとめてカバレッジを取得する - 理系学生日記

    Golangでカバレッジを取得するためには、単純にgo test -coverprofileをすれば良い。そういうふうに思っていた時期がぼくにもありました。 $ go test -coverprofile=coverage.out ./... | tail -5 ? gitlab.com/eponas/epona-aws-starter-cli/internal/logging [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/template [no test files] ? gitlab.com/eponas/epona-aws-starter-cli/internal/terraform [no test files] ? gitlab.com/eponas/epona-aws-starter-cl

    Golangで複数パッケージをまとめてカバレッジを取得する - 理系学生日記
  • Writing unit tests in Golang Part 1: Introducing Testify

    Unit testing is a way of writing tests for the individual components (aka, the smallest part) of a program. The purpose of it is to validate that any piece of code is always working as expected. Moreover, unit testing has a lot of advantages such as improving the quality of code, providing documentation, also the code can be tested individually and doesn’t require another module in order for it to

    Writing unit tests in Golang Part 1: Introducing Testify
  • Goでは○○envが不要になった理由(バージョンアップを怠ると損する理由)

    Goでは○○env系のツールは不要 複数バージョンの処理系を混在させるために、○○env系のツールが広く普及している言語はたくさんあります。しかし、すべての言語で必ずしも必要であるわけではないと筆者は考えています。いままで使っていた言語で○○env系のツールを使っていたため、特に深く考えずに他の言語でも利用しているということはあるでしょう。 Goでも○○env系のツールはいくつか存在します。しかし、筆者はGoにおいて複数バージョンのツールチェイン(コンパイラや標準ライブラリ)を混在させる必要があるのは稀でしょう。また、混在させる必要あったとしても公式で方法を提供しているため○○env系のツールは不要です。 むしろ、goenvを使っていてうまく動かない。PATHの設定がうまくいかないなどのトラブルをよく見かけます。(そんな方が検索に引っ掛けてくれることを祈っています)。 Goの後方互換性 G

    Goでは○○envが不要になった理由(バージョンアップを怠ると損する理由)
  • net/http を httptest を使ってテストする方法

  • 今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ

    こんにちは、@p1assです。 最近研修で Go を書いていて、その際にいくつか質問をされるのですが、聞いてみると前にも答えたような質問が多かったので、これを機にブログに参考リンクをまとめようと思います。 質問された際にすぐ答えられない質問も数多くあり、調べたり教えてもらったりすることで様々なことを再発見できました。 この記事では、質問に対する回答をできるだけ公式に近い文章を引用する形で書き記します。私個人の考えは別の段落になるようにして、事実と意見を区別するように心がけています。 なにか誤りを見つけた際は GitHub で PR を投げていただけると助かります。 言語仕様 関数の引数は値渡しか参照渡しか? Go はすべて値渡し (pass by value) です。 ポインタの場合は、ポインタそのものがコピーされポインタの指し示す先の値はコピーされません。 Go の多値返却はタプルか?

    今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ
  • Goの構造体の使われ方の設計 | フューチャー技術ブログ

    Goで構造体を設計する場合、オブジェクト指向的な「型ごとの責務の分担」以外に、「どのように使われるものか」を考える必要があります。 ポインタで扱うのか?値として扱うのか?両方許可するのか? 値として扱える場合にimmutable(変更不可能)なオブジェクトとするのか、mutable(変更可能)なオブジェクトとするのか 値として扱える場合にゼロ値での動作を補償するかどうか 他の言語で言うと、C#の構造体とクラスの違い、C++のデフォルトコンストラクタあたりに頭を悩ませたことがある人にはおなじみかもしれませんが、Goでもいくつか考慮が必要になります。 ポインタ型として扱う必要があるケースまず最初に決断できる方針としては、ポインタ型でのみ扱うかどうかです。 内部にスライスやmap、ポインタなどの参照型な要素を持っていれば、基的にポインタ型でのみ扱う構造体になります。これらの要素を持っていた場合

    Goの構造体の使われ方の設計 | フューチャー技術ブログ
  • Go で使う Makefile の育て方

    Go を使ってプロダクトを作る時、Makefile を使ってビルドを指定することが多いです。 理由としては、 バージョン情報などを埋め込むのに都合がいい 複数のバイナリを吐き出す時に都合がいい Go のビルドオプションを指定するのにいろいろあって整理しておきたい 事前にコードジェネレータで書き出す部分があり、それを考えると Makefile などで整理したい などなどです。なので今回はプロジェクトが大きくなっていく中でどういう Makefile の書き方をしているか、というのをご紹介しようと思います。 サンプルとして、今回のプロジェクトでは gRPC を使ったチャットサービスのサーバーとクライアントを作ることにします。リポジトリは https://github.com/rosylilly/gochat に置いておきました。 Step 1. バージョン情報を埋める 今回はサーバーとクライアン

    Go で使う Makefile の育て方
  • Server Side Architecture Strategy for Beginners

    Server Side Architecture Strategy for Beginners - 社内初導入のGoAPIのサーバサイドアーキテクチャ設計戦略 - #gocon 25 November 2018 Kazuki Higashiguchi Server Side Enginner, BASE About this talk 当初Goを業務初利用するプロジェクトの サーバーサイドアーキテクチャ の事例 サーバーサイドアーキテクチャにまつわる選択肢は多数... Clean Onion, Layered, MVC2 ...etc 現況に合わせた 段階的な改良 を行っていく 2 About me Twitter @higasgt Kazuki Higashiguchi Server Side Enginner (Go, PHP, ...etc) BASE, Inc 3 Talk Ba

  • GoのアプリケーションにDatadogAPMを導入する。 - Qiita

    業務でDatadogAPMを導入する機会があったので、詰まった箇所などを簡単にまとめようと思います。 Datadogでやりたいこと カスタムエージェントホストの設定 サービス名の指定 環境毎にTraceListのページを切り替える 1つのリクエストに、クエリ等のログを紐づける DatadogTracerのインストール Tracing Go Applications #Installation このページに記載されている通りに、下記のコマンドでインストールします。

    GoのアプリケーションにDatadogAPMを導入する。 - Qiita
  • Go1.7のcontextパッケージ

    Go1.7ではgolang.org/x/net/contextがcontextパッケージとして標準パッケージに仲間入りする.そしていくつかの標準パッケージではcontextパッケージを使ったメソッド/関数も新たに登場する.contextパッケージは今後さらに重要な,Gopherは普通に扱うべき,パッケージになると考えられる.記事ではそもそもcontextパッケージとは何か?なぜ登場したのか?なぜ重要なのか?どのように使うべきか?についてまとめる. contextパッケージが初めて紹介されたのは2014年のThe Go Blogの記事 “Go Concurrency Patterns: Context”である.この記事ではなぜGoogleがcontextパッケージを開発したのか,どのように使うのか具体的な検索タスクを例に解説されている.まだ読んだことがない人はそちらを先に読むと良い. co

  • Golangのcontext.Valueの使い方

    Go1.7でcontextパッケージが標準パッケージに入りしいろいろなところで使われるようになってきた.先日リリースされたGo1.8においてもdatabase/sqlパッケージなどでcontextのサポートが入るなどますます重要なパッケージになっている. “Go1.7のcontextパッケージ”で書いたようにcontextは「キャンセルのためのシグナルの受け渡しの標準的なインターフェース」として主に使われる.ある関数やメソッドの第1引数にcontext.Contextが渡せるようになっていればキャンセルを実行したときにその関数は適切に処理を中断しリソースを解放することを期待する.これはパッケージの作者とその利用者との間のある種の契約のようになっている(パッケージ側でgoroutine作るなというパターンもここで効いてくる). これだけではなくcontext.Contextインターフェースに

  • [Go]Sentryに対応したcustom errorの作り方

    はじめに go v1.x の 標準erorrはシンプルなゆえに欲しい機能が足りていない事が多く 標準errorをより使いやすくしたpkg/errors等が存在しますが、それでもerror自体に特定のステータス(status codeやerror levelなど)を保持したい場合等はそれ専用のcustom errorを作る事になると思います。 それ自体は良いのですが、errorが発生した際にそのerrorをSentryに通知したい場合 sentry-goのCaptureException()ではStacktraceの取得に以下のpackageを使用する事が前提になっています。 pingcap/errors pkg/errors go-errors/errors 今回はcustom errorを使用してSentryへStacktraceを表示させるための実装を試しました。 sentry-go

    [Go]Sentryに対応したcustom errorの作り方
  • `Wrap(err)` in our production #golang | Wantedly Engineer Blog

    Go(Un)Conferenceについて Goが好きな人たちで軽と飲み物をお供にGoの知見をゆるく発表していく会の第4回です。 第1回:4/17(火) Go(Un)Conference(Goあんこ)LT大会 1kg togetterのまとめ 第2回:5/25(金) Go(Un)Conference(Goあんこ)LT大会 2kg togetterのまとめ 第3回:7/26(木) Go(Un)Conference(Goあんこ)LT大会 3kg togetterのまとめ また誰かがGoと別の言語を比較してジェ 復習: なぜ `Wrap(err)` が必要なのか一言で言うと「エラー発生箇所のコンテキスト・情報(stacktrace, etc.)をちゃんと残すため」です. ここは実際の挙動を見るとわかりやすいので,コードで説明します.知ってる人は読み飛ばしてもらって大丈夫です. `Wrap(err

    `Wrap(err)` in our production #golang | Wantedly Engineer Blog