タグ

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

タグの絞り込みを解除

golangに関するdelegateのブックマーク (357)

  • Golangを理解し、Grafanaを使って監視する方法(前半)

    始める前に、皆様に伝えたいことがあります。この記事には、私がgo channelについて理解することができた知識について書きました。良い方法でどのように使用することができるかをお伝えできればと思います。 What is Go Channels?Go Channelとは何でしょうか。 Golang docsは、 「チャンネルは、同時進行のgoroutineを接続するパイプです。あるgoroutineからチャンネルに値を送信し、その値を別のgoroutineに受信することができます」としています。 これは単純なパイプのようなものです。一方の側から送信し、もう一方の側から受信するというものです。次にメールキューをお見せしますが、 goroutinesを使えば非同期にすることができます。 How to use Channels in Gopackage mainimport ("fmt")func

    Golangを理解し、Grafanaを使って監視する方法(前半)
  • Golang: 配列からスライスに変換する

    TL;DR: slice := array[:]で変換できるGo言語にはリストの様なものが二つあります。配列(固定長)とスライス(可変長)です。 一般に、Go言語で配列を扱うことは多くないでしょう。 実際、多くのパッケージ(標準パッケージを含む)が要求するのはスライスです。 とは言っても一部のパッケージでは配列を取り扱っているものがあります。 例えば、crypto/sha512を見てみる と、以下の様な関数が存在します。 ここで、Sizeは同パッケージ内で宣言されている定数で、値は64です。 つまり、この関数は64バイトの長さを持った配列を返します。 この関数は与えられたデータからSHA512チェックサムを計算するものです。 勿論、返ってきた値をそのまま使用することもあるとは思いますが、そのままの値は人間可読な値では無いため、hexdigestを得たいと思うでしょう。 Go言語にはもちろん

    Golang: 配列からスライスに変換する
  • Goメモ-172 (encoding/hexパッケージ) - いろいろ備忘録日記

    概要 エンコード デコード エンコーダー デコーダー ダンプ 参考情報 概要 たまに使いたいときによく忘れているので、ここにメモメモ。。。 encoding/hex パッケージは HEX (16進数) 関連の操作が出来るパッケージで、何気に結構便利です。 通信処理とか書いたりしているときなどに重宝します。 以下、自分用のメモです。 エンコード package hexop import ( "encoding/hex" "github.com/devlights/gomy/output" ) // Encode -- encoding/hex.Encode を利用したサンプルです. // // REFERENCES // - https://pkg.go.dev/encoding/hex@go1.17.6 func Encode() error { // Go では 何かのデータ を変換する

    Goメモ-172 (encoding/hexパッケージ) - いろいろ備忘録日記
  • GoでDependency Injection - Carpe Diem

    概要 「Dependency Injection=依存性の注入」と言われますが、依存したオブジェクトを外部から入れることで何がメリットなのかを感じ取るのは実際に書いてみて分かると思うので、勉強としてまとめてみました。 Dependency Injectionとは デザインパターン 「依存性の注入」ではなく「依存するオブジェクトを注入」 DIコンテナとは別。デザインパターンなのでどの言語でもできる A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it. The service is made part of the client's state.[

    GoでDependency Injection - Carpe Diem
  • Go言語 - %Tや%vの書式で出力される文字列 - 覚えたら書く

    Go言語のfmtパッケージに存在するPrintf関数は書式を指定して標準出力に書き込みを行います。 C言語のprintfに良く似ています。が、C言語には存在しない書式がいくつか加わっています。 その中の代表格として以下のような書式が存在しています。 %T 対象データの型情報を埋め込む %v デフォルトフォーマットで対象データの情報を埋め込む %+v 構造体を出力する際に、%vの内容にフィールド名も加わる %#v Go言語のリテラル表現で対象データの情報を埋め込む これらの書式は、デバッグの時などに利用すると力を発揮すると思われます。 具体的に上記の書式にいくつかデータをセットしてみて、どんな値が出力されるのかを確認してみます。 (最初のサンプル以外は、pakage, import等の記述は省略します) 整数値 package main import ( "fmt" ) func main(

    Go言語 - %Tや%vの書式で出力される文字列 - 覚えたら書く
  • 【必須科目 DI】DIの仕組みをGoで実装して理解する - Qiita

    はじめに クリーンアーキテクチャ、オニオンアーキテクチャなど色々概念が提唱されているが、 私はその勉強をして挫けてしまった。 というのもそもそもDIとか依存についてよくわかってなかったからだ。 そう、勉強の順番を間違えていた。まーそれで気づけたからよかったよかった。 そこで、DIについて出来るだけ詳しくわかりやすくまとめてみた。 この記事を読めば、必ずDIのメリットを理解し、実装できるようになる。 DIとは? DIはDependency Injection(オブジェクトの注入)の略称のこと。 ※依存性の注入ともいうが、オブジェクトの注入として覚えてもらいたい。 処理に必要なオブジェクトを外部から注入できるようにするデザインパターン。 DIのデザインパターンを簡単に説明すると、 オブジェクトをインタフェースとして定義し、使う側は実装オブジェクトでなく、インタフェースを利用するようにする。 実

    【必須科目 DI】DIの仕組みをGoで実装して理解する - Qiita
  • 【Golang】GinのログをカスタマイズしてリクエストIDを追加する - Activ8 Tech Blog

    こんにちは、エンジニアのクロ(@kro96_xr)です。バックエンドを中心にフロントエンドやらインフラやら色々担当しています。 少し前にタイトルの件について調べていたのですが、あまりまとまった記事がなさそうだったのでまとめることにしました。 もし記事の内容に間違っている記述や不適切な記述がある場合にはコメントやTwitterDMなどでお知らせいただけると幸いです。 Ginのデフォルトログ設定について まず、カスタマイズする前にGinのデフォルトのログ設定がどうなっているかを確認します。 巷のGinの入門記事などを読むと、まずgin.Default()を呼ぶように書かれています。下記がよくある例かと思います。 package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // これ r

  • Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ

    今年の夏にGo言語に以下のようなプロポーザルを出していたのですが、それが先ほど承認されました。標準パッケージの関数追加になります。 proposal: bytes, strings: add ContainsFunc · Issue #54386 · golang/go · GitHub Go言語のstringsパッケージとbytesパッケージには、文字列から文字や部分文字列を探す関数がいくつかあります。 探す文字の位置を返す関数、最後から探す関数、そういう文字が含まれるかどうかを返す関数を表にまとめると、次のようになります。 Find what? Index* LastIndex* Contains* substr string Index(s, substr string) int LastIndex(s, substr string) int Contains(s, substr s

    Go言語に出したプロポーザルが通った:{bytes,strings}.ContainsFuncの追加 - プログラムモグモグ
  • Golangで文字列を連結する7つの方法

    ①プラス(+)演算子による文字列の連結 プラス(+)演算子は、文字列の連結に使用することができます。 文字列を連結する最も簡単な方法として、よく使われています。

    Golangで文字列を連結する7つの方法
  • Adding SAML SSO in your Golang service in 20 minutes

  • Goのhttp.Requestのキャンセルの仕組みを理解する - Qiita

    はじめに Goのhttp.Request構造体のctxはdocによると、以下の場合にcancelされます。 For outgoing client requests, the context controls cancellation. For incoming server requests, the context is canceled when the client's connection closes, the request is canceled (with HTTP/2), or when the ServeHTTP method returns. クライアントがタイムアウトを設定していた場合にもタイムアウト時間経過後にコネクションがcloseされるため、サーバ側実装でcontextを参照することでタイムアウトしたことも気づけることになります。 Request.ctxやそ

    Goのhttp.Requestのキャンセルの仕組みを理解する - Qiita
  • Handling 1 Million Requests per Minute with Go

    Handling 1 Million Requests per Minute with Go Jul 6, 2015 Here at Malwarebytes we are experiencing phenomenal growth, and since I have joined the company over 1 year ago in the Silicon Valley, one my main responsibilities has been to architect and develop several systems to power a fast-growing security company and all the needed infrastructure to support a product that is used by millions of peo

    Handling 1 Million Requests per Minute with Go
  • Go な Web Server を Systemd で良い感じに動かすメモ

    Go で Web Server 書く 動作確認するだけのコードなのでなるだけシンプルに書く。んで、 Port 80 を Listen したいけどプロセスは root で走らせたくないので、 systemd でポート開いてそれをプログラム側で使うようにする。 ディスクリプタごにょる部分は coreos/go-systemd がドンピシャなのでこれを使う。 package main import ( "errors" "fmt" "log" "net" "net/http" "github.com/coreos/go-systemd/activation" ) func main() { // Mux を設定する m := http.NewServeMux() m.HandleFunc("/", handler) // Server を設定する s := &http.Server{ Handl

    Go な Web Server を Systemd で良い感じに動かすメモ
  • [Golang]APIのHTTPテスト方法を学んで品質の良いコードを書こう! | セルフノート

    こんにちは。KOUKIです。 とあるWeb系企業でGoエンジニアをしています。 Golangを採用する理由の一つが、とても早いAPIを実装できることにあります。 しかし、テストが意外に難しいので、今回はAPIのテストについて記述したいと思います。 Webフレームワークは、大人気のginを使いましょう。

    [Golang]APIのHTTPテスト方法を学んで品質の良いコードを書こう! | セルフノート
  • Goで時刻を扱うチートシート

    この記事について 上のチートシートは、Goで時刻を扱う際に出てくる表現法と、それらを互いに変換するためにはどうしたらいいのかを一枚の図にまとめたものです。 この記事では、このチートシートに出てくる処理の詳細について掘り下げて説明しています。 使用する環境・バージョン OS: macOS Catalina 10.15.7 go version go1.18 darwin/amd64 OSのタイムゾーン: JST(日標準時、UTC+0900) 想定読者 この記事では、以下のような方を想定しています。 Goの基的な文法は分かっている人 異なる時刻の表現法を、Goではどのように変換することになるかを知りたい人 逆に、以下のような方は読んでも物足りないか、ここからは得たい情報が得られないかもしれません。 一般的にサーバーサイドで、どうすればタイムゾーンを正しく扱うことができるかを知りたい人 タイ

    Goで時刻を扱うチートシート
  • CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ

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

    CSV処理における共通処理をDecoratorパターンで実現する | フューチャー技術ブログ
  • Go1.19~のsync/atomicの新旧APIの使い分け

    Go1.19のリリースでsync/atomicに型が追加され、メソッド経由でアトミック操作が行えるようになりました 新しく実装する箇所に関しては基的に新しいAPIを利用するのが推奨されます 先日仙台で開催されたGo Conference mini 2022 Autumn IN SENDAIでこのアップデートの内容について話したのですが、 従来のAPIがDeprecated(非推奨)にならない理由について説明が不足していたため、それを補足するための記事になります YouTubeのvideoIDが不正です 従来のAPIはDeprecatedにはならない 従来のAPIでやれることは全て実現でき、利便性も高い完全上位互換な機能が生まれたため、従来のAPIはDeprecatedにしてしまった方が良いのではと思い、proposalを投稿しました 議論の結果、提案は却下されています APIの利用方法が

    Go1.19~のsync/atomicの新旧APIの使い分け
  • Goメモ-200 (static linkedなバイナリを作る)(os/user, net, 静的リンク) - いろいろ備忘録日記

    概要 普通にアプリ作って確認 os/user or net パッケージを使うと? CGO_ENABLED=0 を指定 osusergo, netgo のタグをビルド時に付与 参考情報 概要 以下自分用のメモです。よく忘れるのでここにメモメモ。。。 以下はLinux上での話です。 Goでは、標準ライブラリを使っているだけのアプリケーションであれば、大抵ビルドすると static linked なバイナリになります。 静的リンクされたバイナリってことですね。自分を動かすのに必要なものが自分自身で完結しているバイナリです。 昨今、コンテナで動作させることが多いので、依存しているものが少なくて、シングルバイナリなアプリケーションが求められるときも多いです。 軽くてセキュリティ的にも強いコンテナを作るために、シェルやlibcが入っていないイメージを使うこともあります。 普通にアプリ作って確認 なので

    Goメモ-200 (static linkedなバイナリを作る)(os/user, net, 静的リンク) - いろいろ備忘録日記
  • Goメモ-232 (xmlのMarshal/Unmarshalで入れ子の要素を指定) - いろいろ備忘録日記

    概要 サンプル 参考情報 概要 よく忘れるので、ここにメモメモ。。。 xml の Marshal/Unmarshal で入れ子の要素の値を取得する場合、ちゃんと要素毎に type 作って指定していくのが正道だと思いますが、面倒なので一気に取得したいときがあります。 んで、 xml パッケージのドキュメントを見ると以下のように記載されています。 https://pkg.go.dev/encoding/xml@go1.18.4 の Unmarshal の部分に If the XML element contains a sub-element whose name matches the prefix of a tag formatted as "a" or "a>b>c", unmarshal will descend into the XML structure looking for e

    Goメモ-232 (xmlのMarshal/Unmarshalで入れ子の要素を指定) - いろいろ備忘録日記
  • Go で使う Makefile の育て方

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

    Go で使う Makefile の育て方