タグ

Goに関するW53SAのブックマーク (94)

  • Go1.21 New Features

    Go1.21 が 2023年8月9日(JST) にリリースされ、そのリリースノートやブログが公開されています。この記事では前回の Go1.20 New Features に引き続き、Go1.21 の新機能の中から気になった機能を解説していきます。 spec Go1.20 までは、メジャーリリースの一番最初のバージョンの末尾にパッチバージョンが付いておらず、次のバージョンからはパッチバージョンが付くようになっていました。 例えば Go1.20 の最初のバージョンは go1.20 で、次のバージョンからは go1.20.1, go1.20.2, ... のようにパッチバージョンがついていました。 Go1.21 からは、一番最初のバージョンが go1.21.0 のようにパッチバージョンの .0 が付くようになります。 import している package を初期化する順序が Spec に明記さ

    Go1.21 New Features
  • 【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog

    こんにちは、バックエンドエンジニアの藤井脩紀です。 今回の記事では日付計算に潜む罠についてお話しさせていただきます。 なお今回はGoでの事例をご紹介しますが、原理的には他の言語やライブラリでも同様の事象が発生する可能性があります点にご注意ください。 time.Time.AddDateの注意点 突然ですがここでクイズです。 来月が何月か知りたいので以下のようなコードを書きました。 このコードを実行したのは10月だとします。 結果は何になるでしょう? // AddDateの引数は順に年、月、日でそれらの値を加算したtime.Timeを返してくれます fmt.Printf("%d月\n", time.Now().AddDate(0, 1, 0).Month()) 「え、11月でしょ?」と思う方もいらっしゃるかもしれませんが正確には異なります。 焦らさずに書きますが答えは「11月か12月のどちらか

    【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog
  • 「Go net/http タイムアウト」の完全ガイド

    GoでHTTPサーバーまたはクライアントを書くとき、タイムアウトは、最も間違えやすく、そして最も軽微な間違えです。選択する対象が数多くあり、間違えても、ネットワークの不具合やプロセスがハングアップするまで、長い間、何の影響もありません。 HTTPは複雑な多段階プロトコルであるため、タイムアウトには万能な解決策はありません。ストリーミングエンドポイントと JSON API とCometエンドポイントを考えてみてください。確かに、デフォルトは多くの場合、あなたが望むものではありません。 この記事では、お客様がタイムアウトを適用する必要があるかもしれないさまざまな段階を取り出し、サーバーとクライアント側の両方で、これを行う色々な方法を見ていきます。 SetDeadlineまず、タイムアウトを実装するためにGoが公開するネットワークプリミティブの「期限」について知る必要があります。 net.Con

  • 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
  • GoCLIツール職人のためのRust入門

    三連休中にこんなツールを作った。 普段はGoでCLIツールを書いているけど、このツールで初めてRust格的に使ったのでその際に得た知見を元にGoでCLIを作っている人向けにとりあえずRustでツールが作れる状態になれることを目指して、CLIツールを作るときによく使っている処理やRustならではの構文などを中心に書いてみた。 この記事を通して「なぁ~んだ。案外Rustでもサクッとツール作れそうじゃん」とか「Rustにも意外とツール向けのライブラリとかあるんだなぁ」とか思って貰えると嬉しい限り。

    GoCLIツール職人のためのRust入門
    W53SA
    W53SA 2023/10/06
  • Goのhttp.RoundTripperでレート制御とリトライの機能を追加する方法

    はじめに Goで外部へhttpリクエストを行う際には、多くの場合でnet/httpを利用すると思います。 net/httpには通常利用する分には必要な機能が備わっていますが、独自に拡張して使いたい場合はhttp.RoundTripperというインターフェースを利用できます。 利用方法の解説としては、こちらの「Go http.RoundTripper 実装ガイド」という記事に詳細に解説がありましたので参考にさせて頂き、 今回はより具体的な利用例にフォーカスして実装例を交えて紹介したいと思います。 やりたいこと 素のnet/httpではリクエストがエラーになった際のリトライや、秒間リクエストの最大値を制限するようなレート制御の機能はありません。 なので今回は、 リトライ処理 レート制御 この2つをhttp.RoundTripperを使って拡張実装したいと思います。 ※今回のサンプルコードの完成

    Goのhttp.RoundTripperでレート制御とリトライの機能を追加する方法
    W53SA
    W53SA 2023/10/06
  • Goのnet/httpのclientでなぜresponseBodyをClose、読み切らなくてはいけないのか

    いきなり結論 結論としては、 responseBodyをCloseしないとコネクションがブロックしてしまい再利用されず、古い接続が残ったまま、新しく接続するたびに新しいGoroutineとファイルディスクリプタを作ってしまう responseBodyを読み切らないとkeepAliveされずコネクションが終了してしまい再利用されず、接続のたびに新しい接続を作ってしまう。 ということなのですが、コードではどうなっているか見てみましょう。 http.Get ~ client.sendまで http.Get -> client.Get -> client.Do -> client.sendまで http.Get func Get(url string) (resp *Response, err error) { return DefaultClient.Get(url) } ここのDefaultC

    Goのnet/httpのclientでなぜresponseBodyをClose、読み切らなくてはいけないのか
    W53SA
    W53SA 2023/10/04
  • Go1.21:slicesパッケージのチートシート | フューチャー技術ブログ

    The Gopher character is based on the Go mascot designed by Renée French. Gopherのイラストはegonelbre/gophersを利用しました。 はじめに記事はGo1.21連載の記事です。 こんにちは。TIG/EXユニット所属宮永です。 先日、第一回日遺産検定に晴れて合格し、日遺産ソムリエになりました。夏の旅行先をまだお決めでない方は、日遺産公式サイトを参考にして、日各地の魅力的なスポットを訪れてみてはいかがでしょうか。 日遺産については公式サイトの説明が非常にわかりやすいのでご覧になってください。 さて、記事のメインテーマとは異なる事柄を挟みましたが、ここからはGo1.21に追加されたslicesパッケージの解説を行います。 Go1.21のアップデート内容に関しては、すでに多くの解説記事が公開されてい

    Go1.21:slicesパッケージのチートシート | フューチャー技術ブログ
  • Goでのmigrationについて ~ ddl-maker × schemalex ~ - KAYAC engineers' blog

    この記事はカヤックアドベントカレンダー19日目の記事です。 はじめに こんにちは @Konboi です。 皆さん忘年してますか? 私は今のところ順調に忘年できており、今年何をしてたのか大分忘れました。 ちなみに先日行われたカヤック技術部の忘年会の様子です。 肉がきたぞー! pic.twitter.com/w4VIdmMNmO— Masatoshi Kawazoe (@acidlemon) 2016年12月16日 忘年してます pic.twitter.com/T7EW0Z5ZVm— jigya♧kkuma (@jigyakkuma_) 2016年12月16日 ということで表題の通り、今日の記事ではカヤックでのこれからのGoプロジェクトでのmigrationについて紹介しようと思います。 記事であつかう migrationはDB更新を差し 新規テーブルの作成 テーブル/カラム名の変更 テーブ

    Goでのmigrationについて ~ ddl-maker × schemalex ~ - KAYAC engineers' blog
  • Deep Dive into The Go's Web Server

    Gonet/httpパッケージはとてもよくできており、Webサーバーを動かすのに必要になる「httpコネクションを確立してリクエストを読んでルーティングして……」という手続き的な処理を気にせずとも誰でも簡単にWebサーバーを立てられるようになっています。 ですが、そのnet/httpが代わりにやってくれている「裏側の処理」の部分が気になる、何やっているんだろう?と不思議に思っている方はいませんか? このでは、実際に筆者がnet/httpパッケージのソースコードを読み込んだうえで、「GoのWebサーバーがどのような仕組みで起動・動いているのか」というところについて、図を使いながら解説しています。

    Deep Dive into The Go's Web Server
    W53SA
    W53SA 2023/07/14
  • GoでHeadless browserを使いClient Side Renderingを Cloud Run で動かす

    はじめに この記事は、Go言語でヘッドレスブラウザを実装したサーバ(サーバレスなので実際にはコンテナという表現が正しいかも知れません)を作り、Google Cloud Platform (GCP) の Cloud Run (Knative を使用) でセキュアに実行する内容となります。 ハンズオンではありませんが、少し手を加えれば動くものが作れるレベルの資料としています。 一応、なるべく幅広い読者層に分かりやすく伝えるため、人によって冗長的な説明に感じるところもあると思います。その場合は題に入る「Go で ヘッドレスブラウザ を実装したサーバを用意するの」 の章から読み進めて下さい。 Goals Go で CSR (Client Side Rendering / クライアントサイドレンダリング) に対応する方法が知れる たとえば CSR 対応のテストやスクレイピングなどの環境を作る知識が

    GoでHeadless browserを使いClient Side Renderingを Cloud Run で動かす
  • Go の sync.Map について調べる · Issue #53 · suzuki-shunsuke/issue

    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

    Go の sync.Map について調べる · Issue #53 · suzuki-shunsuke/issue
    W53SA
    W53SA 2023/02/21
  • ActivityPub サーバー、honk をカスタマイズしてみる | Coelacanth's Dream

    ActivityPub サーバー、honk をカスタマイズしてみる 最近の Twitter の情勢を受けて、他の SNS、特に Mastodon サーバーに移行または独自のサーバーを構築する人が増えている。 加えて自分の観測範囲では、以前に紹介した Ted Unangst 氏による Go言語製の ActivityPub サーバーの最小実装、honk を構築する人が増えている。1 honk は省メモリであるため、メモリ 512MB の VPS でも快適に動作する。 メインでも予備でも、個人で運用可能な ActivityPub サーバーが欲しい人にとって honk は有力な選択肢になると思う。 また、最小実装ということが手伝い、カスタマイズ、それによる再ビルドと再起動に必要とするコストは小さく、バイナリサイズも自分が運用しているもので 13M と小さい。 そこで、個人的に honk を運用しな

    ActivityPub サーバー、honk をカスタマイズしてみる | Coelacanth's Dream
  • GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang #goroutine - niconegoto Blog

    3/25に行われたGoConで"How Communicating Sequential Goroutines Work"という発表をしてきました。 当初僕はCommunicating Sequential Processesについての話しをする予定だったのですが、時間内にとても発表できそうな内容ではなかったため、Concurrency全般についての話をしました。 そのため、ここではその際触れられなかったgoroutineの実装の話しやCSPの話しなどを含めてGoのruntimeについて何回かに分けてまとめていきたいと思います。今回は主にgoroutineについてです。 GoのConcurrency goroutineの説明に入る前にざっくりGoのConcurrencyについて説明します。 以下、GoConでの発表スライドにざっくりと沿いながら書いていきます。 speakerdeck.co

    GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang #goroutine - niconegoto Blog
  • 【Golang】Exit, panic, Goexitの違い

    はじめに 記事におけるGoのバージョンは1.11.5です。 関数定義 3つの関数定義を、パッケージとともに表示すると以下のようになります。 func os.Exit(code int) func builtin.panic(v interface{}) func runtime.Goexit() 3つの違い ざっくり言うと、上のほうが過激で、下のほうが穏やかです。 os.Exit 引数の整数は終了コードです。今回は例外的な事態が発生した場合を考えているので、終了コードとしては0以外を考えています。 プログラムの中でos.Exit(0以外)が呼ばれると、以下のような挙動をとります。 プログラムは直ちに終了する。 deferされた関数は呼ばれない。 builtin.panic 引数にはログ出力したい文字列等を指定します。したがってこんな使い方をすることが多いと思います(builtinパッケー

    【Golang】Exit, panic, Goexitの違い
  • Goでの並行処理を徹底解剖!

    並行処理をうまく使うのは難易度が高めです。 それゆえに、go文とチャネルについて基的な文法書で知った後「並行処理ちゃんとできる!」の段階まで自力でたどり着くのは大変でしょう。 このは、 *「並行処理ってやって何が嬉しいの?」 *「ゴールーチンとかチャネルとかって一体何者?」 *「ゴールーチンやチャネルを使ったうまいコードの書き方が知りたい!」 *「Goランタイムで並行処理をどううまく処理しているか知りたい!」 といった要望にお答えする、「Goでの並行処理」に関連した事柄について網羅的・徹底的に書きまくったものです。

    Goでの並行処理を徹底解剖!
  • Go Generics で実装する Y コンビネータ、再帰関数を汎用的にメモ化する - アルパカの徒然文

    先日面白い記事を読んだ。The Y combinator in Go with generics である。 一番最初目に入ってきたのは難解なジェネリクスのコードである。 type Func[T, U any] func(T) U type TagFunc[T, U any] func(Func[T, U]) Func[T, U] type CombinatorFunc[T, U any] func(CombinatorFunc[T, U]) Func[T, U] func Y[T, U any](f TagFunc[T, U]) Func[T, U] { return func(self CombinatorFunc[T, U]) Func[T, U] { return f(func(n T) U { return self(self)(n) }) }(func(self Combinat

    Go Generics で実装する Y コンビネータ、再帰関数を汎用的にメモ化する - アルパカの徒然文
  • 作ってわかる! はじめてのgRPC

    gRPCは主にバックエンド、特にマイクロサービス同士の通信に多く使われる通信方式です。 しかしそれゆえに知名度が低く、「gRPCってどんな通信なんだろう?」「HTTPとは別の仕組みなの?」と思っている方もたくさんいるのではないでしょうか。 このでは、gRPCはそもそもどんなコンセプトで作られた通信方式なのかから、Goでの具体的な実装ノウハウ、AWSにデプロイするための設定までを通貫して解説することで、 「gRPC全くわからない」という人が「自分で実装して動かせそうな気がする……!」と思える段階までたどり着けるようにしました。

    作ってわかる! はじめてのgRPC
  • Goならわかるシステムプログラミング

    Goで始める、すこし低レイヤのプログラミング入門。入出力、ネットワーク、メモリなど、現実の世界でプログラムが動くために必要な機能をプログラム言語Goを通して覗いてみよう。OSの機能とは何か、それをプログラミングでどう利用するのか、システムプログラミングの世界をプログラマの視点から眺めていく連載企画。 2017年06月21日 17時00分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第20回 Go言語とコンテナ 連載の最終回。この連載ではプログラムがコンピュータ上で動くときに何が起きているのかをGo言語のコードを通して覗いてきました。今回はその締めくくりとしてコンテナについて紹介します。 2017年06月07日 21時30分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第19回 Go言語のメモリ管理 ソフトウェアにとってメモリは不

    Goならわかるシステムプログラミング
    W53SA
    W53SA 2022/05/30
  • Go言語で利用するLLVM入門 | POSTD

    はじめに LLVMは、コンパイラを作成するための基盤です。2000年にChris Lattnerによって作成され、2003年にリリースされました。それ以来、LLVMリンカ lld やLLVMデバッガ lldb など幅広いツール群を持つ包括的なプロジェクトに発展してきました。 LLVMの秀でた特徴は、一般に LLVM IR と呼ばれる、その中間表現です。LLVMの考え方は、まずこのIRにコンパイルし、次にそのIRを、JITコンパイルする、インタープリタで実行する、または実行しているマシンのネイティブアセンブリにコンパイルするといういうものです。このIRの主なターゲットは、コンパイラです。実際LLVMを使用するコンパイラは、世の中に数多くあります。C言語とC++用はそれぞれclangとclang++、D言語用の ldc2 、RustSwiftなどです。 Emscripten のようなプロジェ

    Go言語で利用するLLVM入門 | POSTD
    W53SA
    W53SA 2022/04/19