タグ

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

タグの絞り込みを解除

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

  • GoでのDLL錬成術 - ほげほげブログ

    こんにちはこんにちは! Go言語狂の皆さん!!うっほ…いや、こんにちは!!! きっと皆さんのことです。Goを書きすぎてGo言語脳になってしまった果てに、Windowsのアドインの作成とかでDLLを生成したくなったのでしょう! そんな皆さんを救うべく、今日はDLLの錬成術について、簡単に書こうと思います。 それではうっほほほい! もくじ こんにちはこんにちは! もくじ 基 構造体ポインタの引数 コールバック関数を呼ぶ FreeLibraryの魔の手から逃れる まとめ 基 DLL形式にコンパイルするためにはWindowsであればMinGWが必要です。 Go言語狂の皆さんですから、Go以外のコンパイラを入れることにためらいを覚えることは理解できます!でも入れてください! 入れましたか?それでは雛形を次に示します。 package main import "C" /* DLLエクスポートする関

    GoでのDLL錬成術 - ほげほげブログ
  • Goのnet/httpのtimeoutについて - Carpe Diem

    概要 タイムアウトと一口に言ってもサーバ・クライアント、そして各フェーズによって細かく設定があります。 今回はGonet/httpのtimeoutについて1つ1つ説明していきます。 環境 golang/go 1.13 Server 全体図 サーバ系timeoutと各フェーズは以下の関係になっています。 各項目 項目 役割 http.Server.ReadHeaderTimeout request headersを読む際のtimeout http.Server.ReadTimeout request headersやrequest bodyを読む際のtimeout。 SetReadDeadline()を呼び出してセットする。 http.Server.WriteTimeout request bodyの読み込み〜responseの書き込みまで。 SetWriteDeadline()を呼び出し

    Goのnet/httpのtimeoutについて - Carpe Diem
  • 改めて見直すGoの特徴

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

    改めて見直すGoの特徴
  • Goでリバースプロキシつくるときにつかえる net/http/httputil.ReverseProxy の紹介 - Qiita

    はじめに GoでHTTPのリバースプロキシを作るときには標準パッケージである net/http/httputil の ReverseProxy が使えるので、提供している機能やざっくりした使い方などについて紹介しようと思います。 これは Makuake Development Team Advent Calendar 2019 の22日目の投稿です。 tl;dr hop-by-hop ヘッダーを自動で捨ててくれるのがうれしい X-Forwarded-For を自動で追加してくれてうれしい 通過するリクエスト、レスポンスの加工ができるのでやりたいことはだいたいできそう httputil を利用したリバースプロキシの最小構成 パッケージドキュメントの example からの引用です package main import ( "fmt" "io/ioutil" "log" "net/http"

    Goでリバースプロキシつくるときにつかえる net/http/httputil.ReverseProxy の紹介 - Qiita
  • go言語でリバースプロキシ | Golang | kido Tech Blog

    httputilのReverseProxyを使うgo言語でリバースプロキシを立てるには、httputilパッケージにあるReverseProxyを使うと簡単。 ReverseProxyはhttp.Handlerインタフェースを実装していて、http.ServerのHandlerに渡せる。 以下はlocalhost:9000のリクエストをlocalhost:9001に移譲する処理。 package main import ( "log" "net/http" "net/http/httputil" ) func main() { director := func(request *http.Request) { request.URL.Scheme = "http" request.URL.Host = ":9001" } rp := &httputil.ReverseProxy{Direc

    go言語でリバースプロキシ | Golang | kido Tech Blog
  • [Go] golang.org/x/time/rate でレイトリミット - Qiita

    レイトリミットを実装するために golang.org/x/time/rate を採用したものの、しばらく経ってから見返すとその仕様を完全に忘れていてショックだったので、こちらに記事として備忘録的に要点をまとめていきたいと思います。 トークンバケット golang.org/x/time/rate は「トークンバケット」というアルゴリズムを Go で実装したパッケージになります。 このパッケージは一見すると使い方が分かりづらいのですが、「トークンバケット」を理解すると合点がいくデザインとなっているので、まずはこちらを理解しましょう。 一応 Wikipedia にもページがあるのですが(トークンバケット - Wikipedia)、golang.org/x/time/rate パッケージのドキュメントを読むのが端的で分かりやすいと個人的には思いました。Limiter 構造体に対する説明として記載さ

    [Go] golang.org/x/time/rate でレイトリミット - Qiita
  • Go による Token Bucket 実装

    Qiita で golang.org/x/time/rate でレイトリミット - Qiita という記事を見かける。 golang.org/x/time/rate は,いわゆる「トークンバケット(token bucket)」アルゴリズムを実装するためのパッケージのようだ。 トークンバケット・アルゴリズムとは A token is added to the bucket every $1/r$ seconds. The bucket can hold at the most $b$ tokens. If a token arrives when the bucket is full, it is discarded. When a packet (network layer PDU) of $n$ bytes arrives, if at least $n$ tokens are in t

    Go による Token Bucket 実装
  • Goのクリーンアーキテクチャで参考になりそうなもの

    はじめに Goでクリーンアーキテクチャっぽく実装したいモチベーションがあり、そのためにはコードを読むのが一番だと思ったので、参考にしていったリポジトリをまとめてみます。 観点としては スター数が比較的多いもの(400以上) READMEにアーキティクチャについての考えが明記されているもの を中心にピックアップしました。 Goの実装で参考にしたリポジトリ Goとは関係ないかもしれないが参考にしたリポジトリ おわりに 何かの参考になれば幸いです。

    Goのクリーンアーキテクチャで参考になりそうなもの
  • http clientでHTTP/2を使う方法 - Carpe Diem

    背景 外部APIを叩く時に利用するhttp clientですが、サーバ側がHTTP/2対応しているのであればコネクションの有効活用ができるようHTTP/2を使いたいものです。 その際にhttp client側で設定する点、気をつける点を説明していきます。 環境 Go 1.15.6 curl 7.64.1 HTTP/2対応しているか確認する方法 まずは対象とするサーバやhttp clientがHTTP/2対応になっているかを確認する方法を紹介します。 サーバ側の確認 サーバ側が対応しているかどうかはcurlの-vオプションで手軽に確認できます。 $ curl -v https://google.com * Trying 2404:6800:4004:809::200e... * TCP_NODELAY set * Connected to google.com (2404:6800:4004

    http clientでHTTP/2を使う方法 - Carpe Diem
    delegate
    delegate 2023/04/12
    [http/2]
  • Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ

    技術記事です。今日は Gogolang.org/x/sync/errgroup についてです。 TL; DR Go が並行処理を得意とするのは事実だけど、とはいえ正しく使うのは難しい(特に channel)。 errgroup なら「並行でダウンロードする」のような頻出パターンをとても簡単かつ安全に使えるので、まずはこれで美味しいところだけ頂いてしまおう。 重い処理を並行にすればあなたのプログラムはカジュアルに数倍速くなる。 多分 errgroup だけで現実の要件の85%くらいはカバーできるはず。 channel も含めてちゃんと使いこなしたいと思ったら、Go 言語による並行処理 がおすすめです。 errgroup とは ドキュメントはここを参照してください。説明を読むよりコード例で見たほうが早いと思うのでこちらをどうぞ。 package main import ( "fmt" "

    Go の goroutine / channel は全然簡単じゃないので errgroup を使おう - 音速きなこおはぎ
  • Goで競技プログラミングをやろう - Evolutionary Architectures

    この記事は Kyash Advent Calendar 2020 7日目の記事です。 最近、競技プログラミング(以下、競プロと略します。)にGo言語で参加していまして、私自身はGoでやる事に特には問題を感じておりませんが、競プロでの経験が少ない方だと言語差など気にする方もいると思いますので、そのへんを説明してみるという記事になります。 結論としては、少なくともAtCoderGoを使うのはそれほど不利ではないので、Goでやってみたいという方は細かい事を気にせずにチャレンジしてみてください。(どの言語でも良いっていうなら、やはりC++のほうが不便が少ないとは思います。) 私は競プロをするようになって、Goに関してはslice周辺への理解が一層深まりました。 競プロの話をする上での前提 まず前提です。ここでいう競プロは特に日人の参加者も多く、敷居が低いと思われるAtCoderのコンテストを対

    Goで競技プログラミングをやろう - Evolutionary Architectures
  • Goを学ぶときに参照した学習リソースまとめ

    皆さん、新しいプログラミング言語を学ぶ時、どのように学習しているでしょうか? 私は4月に新卒でエンジニアになり、業務でGoを使うことになりました。その際、とりあえず公式チュートリアルであるTour of Goをやりましたが、その後にどうやって学習を進めれば良いか迷ってしまいました。 考えてみると、新しい言語を学ぶ際、毎回学習方法に困っている気がします。ネットでサンプルを探す、動画を見る、書籍を読む、などさまざまな学習方法があると思いますが、私は手を動かしながらいろいろなパターンを学んでいくのが好きです。 そこで今回Goを学ぶ際も、手を動かしてさまざまなコーディングのパターンを学習するために、ネットや書籍でサンプルを探して実践しました。 この学習方法は私にとっては楽しみながら続けることができて、他の言語を学ぶ際も今回実装したサンプルを使って学習しようと考えています! そこで自分と同じ様な悩み

    Goを学ぶときに参照した学習リソースまとめ
  • 【高速】フィボナッチ数列をビネの公式を使いGoで実装する

    結論O(log (n))となり 1000項目めを求めるには0.000199s 10000項目めは0.000405sで求められました。 完成品https://github.com/kooooohe/fibonacci/blob/master/main.go 通常の再帰を使った簡単な解き方 fib_blog_1.goGitHub Gist: instantly share code, notes, and snippets.Gist262588213843476func fib(num int) int { if num <= 1 { return num } return fib(num-2) + fib(num-1) } これだとO(2^n)となるためかなり遅い。 ※メモ化については今回は割愛 メモ化すれば O(n)となる 一般項を求める公式証明は漸化式を使うのだが、今回の主題ではないので

    【高速】フィボナッチ数列をビネの公式を使いGoで実装する
  • Golang: 文字列を逆順に並べ替える

    Golang: 文字列のバイトサイズと長さを求めるGolang: 1文字ずつアクセスするGolang: 文字列を逆順に並べ替えるGolang: Unicode エスケープシーケンスを使うGolang: 部分文字列を取り出すGolang: 文字列を連結するGolang: 文字列を繰り返すGolang: 不正なバイト列を置き換えるGolang: Unicode 正規化 文字列型はイミュータブルなので、rune 型のスライスをつくり、並べ替える。 stackoverflow の回答をそのままコピペすると次のとおり。 package main func Reverse(s string) string { runes := []rune(s) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = run

  • Golang製アプリケーションの性能監視 〜 mackerel-plugin-gostats を読み解く - えいのうにっき

    この記事は、Mackerel アドベントカレンダー(全部CRE)の17日目の記事です。今回も、『プラグイン読み解きシリーズ』でいきたいと思います。題材は、mackerel-plugin-gostats! github.com 当記事が前提とするバージョン この記事を書いている今の最新版である、mackerel-agent-plugins の v0.53.0 を前提としています。 Releases · mackerelio/mackerel-agent-plugins · GitHub また、このプラグインが利用しているパッケージ、fukata/golang-stats-api-handlerのバージョンはv1.0.0を前提としています。 github.com どんなプラグイン? このプラグインは、Goで書かれたアプリケーションが消費しているCPUやメモリリソースの状況、GC回数、gorou

    Golang製アプリケーションの性能監視 〜 mackerel-plugin-gostats を読み解く - えいのうにっき
  • 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の書式で出力される文字列 - 覚えたら書く