タグ

golangとgoに関するtakashabeのブックマーク (12)

  • Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog

    はじめに こんにちは!Google Cloudでオブザーバビリティの担当をしているものです。CVE-2021-44228のおかげでバタバタしていますがみなさんはお元気ですか? このエントリーはpyspa Advent Calendar 2021の15日目の記事です。昨日は @moriyoshit さんの「Goのロギングライブラリ 2021年冬」でした。めちゃめちゃ調べてあって良い記事でした。Goでログライブラリの選定をする際にはこちらをまず読むと良さそうです。 2021.12.21 追記: 穴が空いていたのでGo Advent Calendar 2021 その1の14日目の記事にもしました。 さて、今日は当は「Goならわかる確定申告第三表」という記事を書こうと思ったのですが、まだ確定申告の時期ではないのでそれは辞めにします。そのかわり、今日はGo 1.18がめでたくベータ版リリースとなっ

    Goのリリースプロセスとブランチ戦略 - YAMAGUCHI::weblog
  • Goのioパッケージのメソッドを図示 - Carpe Diem

    概要 Goのioパッケージにはio.Reader、io.Writerのインタフェースを有効活用するため以下のような便利なメソッドが用意されています。 io.Copy io.Pipe io.MultiReader io.MultiWriter io.TeeReader しかし普段から使っていないと、これらメソッドの方が簡単にかけるのに忘れて遠回りな書き方をしがちです。 なのでイメージ化して覚えやすいようにします。 図示してみる ASCII.jp:低レベルアクセスへの入り口(3):io.Reader後編 (2/2) こちらを参考に図示します。 ポイントは以下です。 丸いコネクタが io.Reader の送受信 三角形のコネクタが io.Writer の送受信 データはすべて左から右に流れる 例えばos.Stdin、os.Stdoutはこうなります。 io.Copy io.Copyはio.Rea

  • Go 1.16のsignal.NotifyContext() | フューチャー技術ブログ

    Go 1.16リリース記念連載の最終回はsignal.NotifyContext()です。 ご存知のように、Go 1.7でcontext.Contextが入ってから、少しずついろいろなAPIがContext対応になりました。 1.7 netのDialerがDialContext()メソッドを追加 net/httpのhttp.RequestがContext()とWithContext()メソッドを追加。 os/execがCommandContextを追加 1.8 database/sqlが大幅にcontext.Context対応を追加 net/httpのhttp.ServerがShutdown()を追加 netにcontext.Contextに対応したリゾルバーを追加 1.13 net/httpのNewRequestWithContextと、Request.Clone()が追加 外部へのネッ

    Go 1.16のsignal.NotifyContext() | フューチャー技術ブログ
  • Dockerで最小のGoのイメージを作成する(cgo編) - Qiita

    「最小のNode.jsのDockerイメージを目指すスレ」、「JavaでもDockerでマルチステージビルド」というエントリーでは、Node.jsとJavaを使ったアプリケーションのイメージをなるべく小さくするトライアルをしました。 今度はGoでやってみます。ただし、Pure Goで最小というのはすでに方法があって、scratchという何も含まれないイメージを元に、静的リンクしたバイナリを配置するという方法です。 Building Minimal Docker Containers for Go Applications Goを使う場合に、一部cgoで使われたパッケージを利用したいこともあるでしょうし、雑にコマンドラインを利用することもあるだろう、ということで、今回も、できることを減らさずに(やりたいことにしたがって細かく作戦を微調整する必要がない)、なるべく小さく、という方針でいきたいと

    Dockerで最小のGoのイメージを作成する(cgo編) - Qiita
  • GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々

    https://github.com/Songmu/gotesplit gotesplitというかなり便利なツールを書いた。Goのテストをいい感じのサブセットに分割して、それを実行するものです。このアプローチで、社内のテストを15分から3分くらいまでに短縮しました。 これを使えばCI環境での高速なテストの並列実行を簡単に実現できます。 実例 CircleCIGitHub Actions上で簡単に導入できます。 CircleCIの場合 parallelism: 5 docker: - image: golang:1.15.3 steps: - checkout - run: command: | curl -sfL raw.githubusercontent.com/Songmu/gotesplit/main/install.sh | sh -s bin/gotesplit ./... -

    GoのテストをCIで簡単に並列実行する | おそらくはそれさえも平凡な日々
  • Go 言語 には data race が存在する

    Go 言語 には data race が存在する “Gomium Browser” writeup from Google CTF 2019 Finals @hama7230

    Go 言語 には data race が存在する
  • コミット前後でベンチマークが悪化していたらテストを落とすGoのCI用ツール - knqyf263's blog

    当にただこれがやりたかっただけです。今でも既存のものがあるだろうと思っているのですが、誰も教えてくれなかったのでシュッと作りました。落ち込まないので今からでも教えてくれて良いです! pushしたらコミットの前後でgo test -bench的なことして有意に悪化してたらテスト落としてくれるSaaSとかOSSとかありませんか— スッキリごん! (@knqyf263) 2020年1月10日 概要 上のツイートにある通りなのですが、Goだとベンチマークを計測するツールがデフォルトでgo testに同梱されているので、GitHubとかにコミットされたらそのコミットと一つ前のコミットでベンチマークのスコアを比較して、悪くなっていたら教えて欲しかっただけです。シェルスクリプトで数行で出来るようなレベルですし、ちょっとオプションつけたり表示をリッチにしても200行ぐらいで済みそうだったのでGoでツール

    コミット前後でベンチマークが悪化していたらテストを落とすGoのCI用ツール - knqyf263's blog
  • Go言語の思想とエウレカでの5年間の活用

    こんにちは、こんばんは。CTO の kaneshin です。エンジニア組織のマネジメントに多く時間を割いていますが、技術的な方面では GoGCP を掛け合わせて Nature Remo + Go + Cloud Functions + BQ を駆使して、部屋の温度・湿度・照度や人体センターの検知を趣味で少しずつ開発しています。 クラウドサービスをはじめとしたマネージドサービスが主流な界隈にとって、今までアプリケーションの責務として実装していたところをマネージドサービスに責務を委譲することができたりするので、アプリケーションを複雑に実装しなくて済むようになっていますし、保守・運用の観点からもそのような設計方針をよく目につくようになりました。 例えばバッチ処理でデータを ETL 処理の設計を責務分割するのは良い例でしょう。 Data Transformation with Cloud D

    Go言語の思想とエウレカでの5年間の活用
  • Go の命名規則 | micnncim

    記事は Go Advent Calendar 2019 11 日目の記事です。 Go はシンプルな言語機能・シンタックスが特徴であり、命名規則にもそのシンプルさが表れています。 記事では、公式や著名な Go エンジニア、OSS などから見られる Go らしい命名規則を紹介します。 今更なテーマかもしれませんが、意外にも公私共々で命名規則が意識されていないコードを時折見かけるので、自戒も込めて記します。 誤った内容があれば Twitter でご指摘いただければと思います。 パッケージ名簡潔にするEffective Go では、short, concise, evocative なパッケージ名が望ましいとされます。 これはパッケージ名に限らずほとんどあらゆる命名において役立つ指針だと思います。 また、「パッケージ名は一言で何をするかを表すエレベーターピッチだ」という Dave Cheney

    Go の命名規則 | micnncim
  • Go ランタイムのデバッグをサポートする環境変数 - Qiita

    はじめに Go はシンプルな構文ながら複雑な処理を行えるプログラミング言語です。エラーも自らがハンドリングするスタイルなので割とバグが入り込みにくいのが特徴です。しかし時には Go 体のソースを見ないと動きが確認できない事もあります。とは言えオープンソースだからといって全ての挙動が簡単に探れるものではありません。 コンパイラの動きであったり、ランタイムの動きであったりで良く分からない物があった場合に、ソースを変更して print デバッグする事が良い方法とは言えません。 幸運にも Go ではランタイム、標準パッケージにデバッグのヒントを出せる仕組みが用意されています。GODEBUG や GOGC、GOTRACEBACK という環境変数が用意されており、設定を行う事で挙動を変更できたり色々なデバッグ情報を出力できたりします。 記事ではこれらの環境変数に設定可能な値を、筆者の知見を交えて紹

    Go ランタイムのデバッグをサポートする環境変数 - Qiita
  • Why Generics? - The Go Programming Language

    This article is about what it would mean to add generics to Go, and why I think we should do it. I’ll also touch on an update to a possible design for adding generics to Go. Go was released on November 10, 2009. Less than 24 hours later we saw the first comment about generics. (That comment also mentions exceptions, which we added to the language, in the form of panic and recover, in early 2010.)

    Why Generics? - The Go Programming Language
  • Go Concurrency Patterns: Pipelines and cancellation - The Go Programming Language

    Tips for writing clear, performant, and idiomatic Go code

    Go Concurrency Patterns: Pipelines and cancellation - The Go Programming Language
  • 1