タグ

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

タグの絞り込みを解除

GoLangに関するclavierのブックマーク (1,619)

  • Go言語でつくるREST API開発 2024年版

    記事では、GoMySQL を用いた REST API 開発を行なっていきます。ここ最近、アーキテクチャや設計、テスト、API、ログ管理、CI/CD を勉強してきて個人的に納得できる構成が構築できるようになったため、としてアウトプットしたいと思いました。これから、API を作成しようと考えている方の参考になれば幸いです。

    Go言語でつくるREST API開発 2024年版
  • SQLBoilerのちょっとしたTips集

    はじめに SQLBoilerは、スキーマに合わせたORMを生成するツールです。 READMEにも書かれていますが、意外と気づきづらい部分があったりするので、使い方から、ちょっとしたTips、ハマりポイントをまとめます。 少しでも参考になれば幸いです。 前提 MySQL SQLBoiler v4.16.1 生成したコードはmodelパッケージに配置されているとします テーブルは以下を想定 CREATE TABLE `teams` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_

    SQLBoilerのちょっとしたTips集
  • モノタロウがGoとprotobufで進める爆速マイクロサービス開発とそれを支えるプロセス - MonotaRO Tech Blog

    こんにちは。モノタロウのTechBlog編集チームです。 モノタロウではECサイトでのお客様体験の向上を目指して、日々改善に取り組んでいます。 商品の出荷目安などの出荷関連情報は重要な要素の1つになります。 今回は、出荷関連情報の正確性を改善するとともにシステムの変更容易性を向上させるためにマイクロサービス化に取り組んだ活動をインタビューしました。 自己紹介 納期表示を高度化する サプライヤ在庫連携機能開発のつらみ AVLのマイクロサービス開発のすすめ方 リリース・監視・その後の展開 おわりに 今回インタビューしたみなさん 自己紹介 山崎 章裕 ECシステムエンジニアリング部門 開発生産性グループ、プラットフォームエンジニアリング部門 CTO-Officeグループ AVLチーム兼務 2019年8月に入社し、主にECサイトの注文・配送周りのプロジェクトにテックリードとして関わる。またECサイ

    モノタロウがGoとprotobufで進める爆速マイクロサービス開発とそれを支えるプロセス - MonotaRO Tech Blog
  • Goで実践 アクターモデル vol.1 Hello Actor - ytake blog

    Hello Actor 細かい機能の解説はあとの回として、 まずはアクターシステムを使ったプログラミングを体験してみましょう。 Goではアクターシステムが商用でも十分利用できるものは、 下記のProto Actorとergoがあります。 github.com github.com Proto.Actorは、Akka.NET のオリジナル作成者 Roger Johansson によって開発されているもので、 Akka/Pekko と基の部分がある程度似た形になっています。 あくまで似ている程度で、現在のAkka/Pekkoほど強力なツールが揃っているわけではありませんが、 Proto Actorで概念や作り方を覚えると、少ない労力でAkk/Pekkoにも移行などもができるようになります。 細部は異なりますが、概念などはかなり似ていますのですんなり理解できるはずです。 ergoは Erlan

    Goで実践 アクターモデル vol.1 Hello Actor - ytake blog
  • bmf-tech.com - Goでオレオレ証明書がほしいときの一手

    GoでHTTPサーバーを書いているときなどオレオレ証明書がほしいときに役立つワンライナー。 go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -rsa-bits 2048 -host localhost cert.pemとkey.pemが用意できる。 openssl使ったりmkcert使ったりしていたけどGo使っていたらこれで良さそう。 cf. Source file src/crypto/tls/generate_cert.go

  • Goのテスト安定性向上のためにFlakyなテストを再試行する機能を導入する提案 - tomato3713’s blog

    Go言語にFlakyなテストへのサポートを追加する提案が面白かったので紹介します。 概要 Flakyなテストとは、コードに変更がないにもかかわらずテストが成功したり失敗したりと不安定な実行結果になるテストのことです。 テスト結果は来なら全て成功ならリリース可能、1つでも失敗すればバグがあるのでリリース不可のようにリリースの可否を判断するための情報です。 そのため、不安定なテストは書かないようにすることが大前提です。 しかし、実際にはflakyであるとわかっていても修正が難しかったり、修正するための時間がないのでそのまま残すという判断をすることもあります。 Flakyなテストは削除するというのも手ではありますが不安定であってもテストが無いよりはマシとして残すこともあると思います。 github.com この提案では、Flakyなテストを扱うための機能を追加するものです。 初めの提案内容は、

    Goのテスト安定性向上のためにFlakyなテストを再試行する機能を導入する提案 - tomato3713’s blog
  • RawBytesは使い捨てよう - methaneのブログ

    go-mysql-driverに来たバグ報告を調べていたら、 database/sql.RawBytes の利用方法にハマるとデバッグの難しい落とし穴があったのを見つけたので、Go側のバグとは断言できないもののGo側で直すべきだと報告しました。他の人がハマらないように簡単に解説しておきます。 github.com RawBytesはtype RawBytes []byteのように宣言されていて、[]byteのように扱える。[]byteとの違いは、利用可能期間が短くてrows.Scan(&in)からrows.Next()かrows.Close()までの間にしか使えないという制約があることだ。 rows.Next()が呼ばれた時、ドライバーは受信バッファの中の文字列等のデータを浅い(shallow)コピーで返すことができる。そのデータは次にrows.Scan()が呼ばれた時に使われるのだが、S

    RawBytesは使い捨てよう - methaneのブログ
  • golinesのベースフォーマッタをgofmtにして実行する

    golinesはGo言語のコードフォーマッタで、1行当たりの長さをいい感じにしてくれます。 golines をディレクトリ指定等で使うと結構処理が重いです。 高速化のために、過去にgoroutine使って並列化するようなpull-request出したりもしました。 最近、golinesのプロファイル取ってみて気づいたのですが、golinesはデフォルトで裏でgoimportsをexecして実行しているので、結構重いということに気づきました。 もうひとつgolinesがデフォルトで対応しているベースフォーマッタにgofmtがあるのですが、こちらはモジュールとして呼び出しているので、非常に高速でした。 プロジェクトの性質にもよりますが、ファイル数が多い場合には、ベースフォーマッタをgoimportsではなくgofmtにすることで高速化できそうです。 以下のようにすれば、gofmtを指定して実行

    golinesのベースフォーマッタをgofmtにして実行する
  • Go スライスのソート順を維持したまま要素を追加する - Unengineered Weblog

    スライスのソートを維持したまま要素を追加する関数 appendSorted の実装 func appendSorted[S ~[]E, E cmp.Ordered](s S, e E) S { i, _ := slices.BinarySearch(s, e) return slices.Insert(s, i, e) } 挙動 s = []int{} s = appendSorted(s, 4) // [4] s = appendSorted(s, 1) // [1 4] s = appendSorted(s, 9) // [1 4 9] s = appendSorted(s, 5) // [1 4 5 9] s = appendSorted(s, 3) // [1 3 4 5 9] s = appendSorted(s, 11) // [1 3 4 5 9 11] 計算量 配列の長さを

    Go スライスのソート順を維持したまま要素を追加する - Unengineered Weblog
  • 【OpenTelemetry】トレーサビリティを高めるLoggerを考えてみた【Go, Slog】

    はじめに 最近携わらせて頂いている開発案件では、Goを使用してMicroserviceを開発しているのですが、ログからエラー内容を把握するのが困難という課題がありました。 これを解決するために、OpenTelemetryを活用してトレーサビリティを高めるLoggerを設計しました。記事では、OpenTelemetryの計装例とLoggerの実装例を汎用的な形にしてご紹介します。 前提 この記事ではOpenTelemetryそのものの説明は割愛します。以下のトピックは理解しているものとして進めます。 Trace & Span Baggage Context 環境 記事では、以下の環境を前提としています。 言語: Go 1.21 Cloud: GCP(GKE, Cloud Logging等) 通信: gRPC Gateway 課題と解決策 ログからエラー箇所を特定する上での主な課題は以下の

    【OpenTelemetry】トレーサビリティを高めるLoggerを考えてみた【Go, Slog】
  • 【初心者向け】Goのテストにおけるベストプラクティス - Qiita

    前提:テストをなぜ行うのか? 「そもそもなぜテストをするのか」、目的をもってテストを書いていますか? テストの目的を知ることで、何のテストが必要か、どんなテストを書くべきかが迷わなくなると思います。 調べたり、実際に書いてみて自分が感じたことは、以下の 3 つです。 コードの質を向上させる(バグ発見、処理の高速化など) 開発の過程で機能を追加したらなぜか動かなくなったり、直したはずのバグが復活することありませんか? そのときにログやコードを読んで、バグを手動で見つけるのはすごく困難です。 テストを書くことで、機能を変更しても動作確認やバグの発見が容易に行えます!(とても便利) コードを書いた人の意図を明示する 他の人が書いたコードは読みにくいと感じる人が多いと思います。 この理由の一つに、「コードを書いた人の意図や頭の中の仕様を理解できない」というのがあると思っています。 テストを書くこと

    【初心者向け】Goのテストにおけるベストプラクティス - Qiita
  • 横断的コードレビューを1年間やった個人的な振り返り - DMM inside

    Dagger Go SDK vs Shell in GitHub Actions ~ モノレポのCIの実装をGoで実装するまでの道のり ~

    横断的コードレビューを1年間やった個人的な振り返り - DMM inside
  • 現場で役立つGo言語のTipsをただまとめてみた

    はじめに こんにちは、23卒でバックエンドエンジニアをしているたかしゅんです。 私の所属しているプロダクトではサーバーサイドの開発言語としてGoを採用しております。 チームでGoの勉強会をした際にあまりにもGoの流儀や綺麗な書き方を理解していなかったので、以下の書籍を読みました。 [Go言語 100Tips ありがちなミスを把握し、実装を最適化する] この書籍から得た知見、プルリクエストのレビューで受けたアドバイス、そしてコードレビュー時に意識すべき点などを基に、知識を整理し共有したいと思います。 基礎文法は理解しているけど、実際のプロダクトで何を意識して書けば良いのかわからない方に、少しでも参考になれば幸いです。 1. コード 1.1 不用意にネストしない 可読性の悪いコードには命名、一貫性、書式など様々な原因がありますが、その中の重要な原因の一つとしてネストが関係します。 よくある例と

    現場で役立つGo言語のTipsをただまとめてみた
  • VScodeのGolangをデバッグする方法

    今回やりたいこと VScodeで、Golangのデバッグをやりたかったのですが、launch.jsonの作成がうまくいかない? 私くは、homebrewでGolangをインストールしたので、設定が違うのかも? 設定 こちらの記事を参考にしましたが、ライブラリーはターミナルを開いてホームディレクトリでインストールしました。 てっあれ自分の記事だ😅 必要なライブラリーをインストールする 結構手こずった💦 パスは通っているようだ? launch.jsonを作成する: ブレークポイントを打つ: 画面左のRunボタンを押すと実行できます。赤い丸をつけているのが、ステップオーバーという1行つづコードを進めていく機能です。一番左の再生ボタンを押すと全てスキップできます。 感想 今回は、いつもDartでやってるデバッグの作業をGo言語でもやってみたかったのでデバッグを実際にやってみて、どのように構築し

    VScodeのGolangをデバッグする方法
  • ebpf-goによるLinuxカーネルトレース入門

    ebpf-goによるLinuxカーネルトレース入門 ebpf-goを使用したLinuxカーネルトレース(fentry)について紹介します。 ebpf-goは、eBPFのGo向けライブラリです。このライブラリは、libbpfに依存せず(cgoを使用せず)にeBPFプログラムとデータのやり取りが可能であるため、ポータビリティが高くGo言語に適したeBPFライブラリとなります。 fentryは、カーネル関数のエントリポイントにプログラムをアタッチするためのBPFプログラムタイプです。簡潔に言うと、カーネル関数にフック処理を行うことができます。 GitHub: ebpf-go(cilium/ebpf) 公式ドキュメント: The eBPF Library for Go 記事ではebpf-goのexamples内のtcprttを基に、ebpf-goの開発方法についても説明します。 前提条件として、

    ebpf-goによるLinuxカーネルトレース入門
  • DDDを実践するためのリポジトリ層の設計(Go言語による例)

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

    DDDを実践するためのリポジトリ層の設計(Go言語による例)
  • GoのASTを解析してFeature Toggleを掃除する - freee Developers Hub

    この記事はfreee Developers Advent Calendar 2023の21日目の記事です。 こんにちは、金融開発部でEMをしている ogugu です。 今回は、Go言語において Feature Toggle の分岐を掃除するCLIを作ったので、ご紹介します。 ※ 毎年恒例の開発合宿 での成果になります。 Feature Toggle とは Feature Toggle とは、特定機能の有効・無効をフラグによって切り替える方法です。 金融開発部では、以下のように Feature Toggle を実現できるライブラリを用意しています。 if featflg.Enabled(ctx, "feature_name") { doNewLogic() } else { doOldLogic() } 一般に、フラグ設定は、設定ファイル・環境変数・ストレージなどから読み出し、それらに対する

    GoのASTを解析してFeature Toggleを掃除する - freee Developers Hub
  • もっと log/slog を使おう

    はじめに この記事は Go アドベントカレンダー 2023 の最終日 25 日目の記事です。 皆さん log/slog 使ってますか。便利なのでぜひ使ってください。 slog は構造化ログを出力する為のパッケージで Go 1.21 で導入されました。これまでも zap や zerolog といったサードパーティ製のロガーを使う事で構造化ログを出力する事ができましたが、構造化ログを出力する機能が Go の標準ライブラリになりました。 slog とは 通常の log パッケージは、時刻とメッセージの単純な出力になります。

    もっと log/slog を使おう
  • ユニットテストで避けるべき罠: 最適な品質保証のために落とし穴を避ける - Qiita

    はじめに 新卒として、実務に入って3ヶ月目のお話。なぜかテストコードの正式な導入の動きにより、先輩から、「テストコードの規約かいて〜〜〜」と超ラフに言われ、「ん?」となりつつ、作りました。そんな中で、テストコードの作成やお試し実装などをしている時に、みんなこれハマるよな...というものをざっと上げてみます。 ユニットテストにおけるテスト自動化は、システムのテストにおいて最も難易度が高いと言われているそうです。その要因の1つとして、やはり注意すべき点や陥りやすい罠が多いことが挙げられます。この記事では、テストコードの一般的な罠に焦点を当ててみました。 対象の読者 今後、会社にユニットテストを導入しようと考えている人 品質管理をしているエンジニア テストコードに興味があるエンジニア 1. Over-Testing と Under-Testing テストをする上で、テストシナリオとして必要なもの

    ユニットテストで避けるべき罠: 最適な品質保証のために落とし穴を避ける - Qiita
  • goroutine leakを解消したい!

    この記事は、Magic Moment Advent Calendar 2023 15日目の記事です。 こんにちは! Magic Moment で Backend Engineerをしている 大塚 です。 Magic MomentではGo言語によるマイクロサービス開発をしているのですが、ある日、あるサービスのメモリ使用量が継続的に上昇する現象を観測しました。 そこで、どういった調査をしてどのように解消までいったかをまとめました。 メモリ使用量の上昇を観測 メモリ使用量が日々上昇していることが確認できます。さっそくどこで何が原因でメモリリークしているか確認してみます。 Cloud Profilerで確認 以前よりCloud Profilerを導入していたため、まずはCloud Profilerでメモリ使用量やgoroutineの数を確認しました。 Cloud Profilerについては弊社Te

    goroutine leakを解消したい!