タグ

golangに関するdmizuno55のブックマーク (6)

  • Go言語の記述の迷いどころについて

    この記事はGoのコードをいくらか書いていてもっとGoらしい書き方に興味を持ってからみてね!(Go初見で読んでも響かない内容です) Goは「シンプルで迷いなく書ける」というのが売りではあるのですが、 実際書き始めると、「あれ?これどうやって書くほうがいいの?」ってポイントにちょくちょく巡り合います。そのようなポイントを思い出しながら今思うベターな書き方を紹介しようと思う。 err変数束縛について err変数の受け取りを複数回繰り返していると「:=」だけで書けないという状況に出会うでしょう。 err := funcA() if err != nil { ... } err := funcB() // <- コンパイルエラー: "no new variables on left side of :=" if err != nil { ... }

    Go言語の記述の迷いどころについて
  • golangの非同期処理にDispatcher-Workeパターンを利用してGraceful Shutdownを行う方法について

    golangは、goroutine/channel を使って並行処理が簡単に実行できるので、重たい処理を非同期で実行しておくのは、非常に簡単です。ただし、並列処理するためのスレッドをいくらでも立てられるが、その立てスレッドが終わったのかを把握するためには、ちゃんと設計する必要があります。今回は、非同期処理で重たい処理を行っているプログラムがSIGTERMを受信した際に、安全に処理を継続して停止する仕組みについて、紹介します。 きっかけDockerAPI自体も終了時にSIGTERMを送ってくるので、そのSIGTERMハンドラを実装しないとイケないなということとで調べたのがきっかです。 Graceful shutdownとはGraceful shutdownとは、一般的に以下の停止動作を指します。 停止要求(例えば、SIGTERM)受信後に、新しい処理リクエストを受け付けないようにする停止要求

    golangの非同期処理にDispatcher-Workeパターンを利用してGraceful Shutdownを行う方法について
  • [Golang] エラーハンドリング

    概要今回のブログポストではGolangでエラーをハンドリングする方法について説明します。このブログポストで紹介するコードは次のリンクで確認できます。 GitHub: https://github.com/dev-yakuza/study-golang/tree/main/error-handlingエラーハンドリングプログラミングでエラーはいつでも起きる問題です。 バグ: ヒューマンエラー(プログラマーのミス)、プログラムの誤動作外部環境: マシンの問題(メモリ不足)、物理的な問題(電源遮断)このエラーを処理する時、できる方法は2つあります。1つは実行中のプログラムを終了させることと、もう1つはエラーをハンドリング(Handling)してプログラムを持続させる方法です。 エラーリターンGolangでは次のようにエラーをリターンして、コードを使う方でエラーをハンドリングできるようにしてます。

    [Golang] エラーハンドリング
  • Go: DepからGo Modulesへの移行 - Qiita

    はじめに Go modulesはGo1.13(August 2019)から正式に導入されたGo言語公式の依存パッケージ管理ツールです。Go modules以前は、depが依存パッケージ管理のツールとしてはデファクトでした。Go modulesはGo1.11から使用は可能でしたが、環境変数(ENV GO111MODULE=on)を設定したり色々と手間がかかる事前準備が必要でした。Go1.13からはデフォルトでGo modulesが組み込まれています。 そもそもGo Modulesとは何? Goの新しい依存管理システムである。 モジュールは、一つのユニットとしてバージョン管理されている関連Goパッケージの集まり。1.11からはmoduleモードとGOPATHモードが使えるようになっていましたが、1.13からはmoduleモードがデフォルトでONになっています。Goのオープンソースモジュールのエ

    Go: DepからGo Modulesへの移行 - Qiita
  • LLVMのauto-vectorizationとc2goasmによるGo Plan9 Assemblyの生成によるSIMD最適化 - c-bata web

    InfluxDBの開発チームはApache Arrowの技術に注目していて、ArrowのGo実装の開発にも積極的に参加しています。Stuart Carine (InfluxDBの開発チームメンバー)がApache ArrowのGo実装に取り入れたc2goasmとLLVMを使った最適化が以前話題になりました。 www.influxdata.com c2goasm はClangで生成したアセンブリをGo Plan9 Assemblyに変換できる汎用的なコマンドラインツールです。しかしその活用事例はほとんどが、Goコンパイラーが行っていないSSEやAVX命令を用いたSIMD最適化です。この記事ではAVX2によるSIMD演算を実現するための c2goasm の使い方を整理します。最終的にどれくらい速くなるかでいうとfloat64のsum演算は10x以上高速化しました。 $ go test -ben

    LLVMのauto-vectorizationとc2goasmによるGo Plan9 Assemblyの生成によるSIMD最適化 - c-bata web
  • Go の channel 処理パターン集 | Hori Blog

    Hori Blogフリーランスでバックエンドエンジニアとして活動している Ryota Hori のブログです。 最近はテック系記事より雑記ブログ気味。 この記事は Go Advent Calendar 2017 の 1 日目の記事です。 Go の長所に goroutine による非同期処理がありますが、どうしても channel の取り回しで黒魔術化しがちです。少しでも闇を減らしていきたいので、 channel らへんの取り回しについてパターンをまとめました。チートシート的に使えれば嬉しいです。 Go の channel の基礎 入門資料として使いたいので、題に入る前にざっくり基礎を。 定義のパターン channel には capacity という概念があります。 capacity は channel 内でバッファリングしておける容量のことで、 capacity に空きが無い場合は送信側

    Go の channel 処理パターン集 | Hori Blog
  • 1