タグ

goに関するSixeightのブックマーク (66)

  • Goの自動テスト高速化のための調査と改善手法 - Cluster Tech Blog

    はじめに こんにちは、クラスター株式会社でソフトウェアエンジニアをやっているid:shiba_yu36です。 クラスターではGoの自動テストをCircleCIで実行しています。入社して以降、この自動テストの実行時間が少し長いと感じたため、調査と改善を進めてきました。結果として速度を改善できたので、この記事でGoの自動テスト高速化のための調査と改善手法について共有したいと思います。 はじめに Goの自動テストで課題だったこと 最終的な結果 自動テスト高速化の流れ テスト実行時間のボトルネックを調査する CircleCIのTIMINGタブで大まかなボトルネックを調査する make testのボトルネックを調査する 高速化でやるべきことを決定する 1つずつ改善し結果を計測する go generateの成果物をレポジトリにcommitし自動テスト上では実行しない: 2分短縮 ビルドキャッシュを用い

    Goの自動テスト高速化のための調査と改善手法 - Cluster Tech Blog
    Sixeight
    Sixeight 2023/10/19
    一般的にどうやってボトルネックを探して改善していくかってところの参考にもなってありがたい
  • 次なる`pkg/errors`を探して - カンムテックブログ

    エンジニアの宮原です。 今回はGoでスタックトレースを取得するライブラリ選定についての記事です。 この記事は 【Gophers Talk】スポンサー4社による合同LT & カンファレンス感想戦で発表したものです。 発表スライドはこちらから確認できます。 この記事の目的 この記事ではpkg/errorsからの移行先を探すための参考情報を提供することを目的とします。 Goのエラーハンドリングのやり方等についてこの記事では触れないこととします。 pkg/errors とはなにか pkg/errorsとは、githubのREADMEを引用すると Package errors provides simple error handling primitives. とあり、直訳すると、「エラーハンドリングの基礎を提供するパッケージ」となります。 pkg/errorsを利用することで、Go体にはないスタ

    次なる`pkg/errors`を探して - カンムテックブログ
    Sixeight
    Sixeight 2023/06/19
  • これまでとこれからのGo | gihyo.jp

    Go歴史 連載では、筆者(tenntenn)と周囲のGoエンジニアで、Goに関わる今アツい話を取り上げていきます。最新のGoの機能やこれからリリースされるGoの機能はもちろん、実際の開発現場で用いられているノウハウや自作ライブラリやツールについてご紹介します。第1回目はtenntennがこれまでとこれからのGoについて取り上げます。 Goは2009年にGoogleによって公開されたプログラミング言語です。2012年にGo1として正式公開されました。2022年現在では、GoogleNetflixをはじめとする海外企業だけはなく、筆者の所属するメルカリなど国内の企業でも多く用いられるようになってきました。海外Goの導入事例は公式サイトのケーススタディで確認できます。国内企業の導入事例はGoの公式Wikiに掲載があります。これらを見るとスタートアップからメガベンチャー、大企業までさまざま

    これまでとこれからのGo | gihyo.jp
    Sixeight
    Sixeight 2022/08/31
  • Go の最初の手順 - Training

    プログラミング言語の学習に関心があるのに、どこから始めればよいかわからない場合は、 ここから始めましょう。 Go で単純なプログラムを構築するために必要な基的な構文と思考プロセスについて説明します。 このラーニング パスの内容は次のとおりです。 Go コードの最初の行を記述するために必要なツールをインストールします。 Go で制御フローを使用する方法について説明します。 Go でのデータ型について説明します。 エラーを処理する方法について説明します。 メソッドとインターフェイスを使用する Go での同時実行のしくみについて説明します。 プログラムを作成してテストします。

    Go の最初の手順 - Training
    Sixeight
    Sixeight 2021/03/14
  • Goのプロジェクト構成の基本

    Goプロジェクトをどの様なファイル構成で配置すれば良いか読み物が少ないという指摘を見たのでまとめてみようと思う。 GOPATHについて Go1.16がリリースされたことでGo-Moduleによるプロジェクト構成が標準で推奨されることになりました。(Go1.11までさかのぼってGo-Moduleは使える様になってます) Go-Moduleモードでは「GOPATH配下にプロジェクトを置かなければならない」という制約からは解放されています。なので、実質GOPATHはどこを指していても構わないし設定されていなくても「ユーザーホーム/go」というデフォルトの場所が決まっているので開発できます。 おすすめの環境変数設定は以下の2つだけ。 「GOPATH=~/.go」(WindowsGOPATH=%USERPROFILE%\.go) 「PATH=$GOPATH/bin:$PATH」(Windows

    Goのプロジェクト構成の基本
    Sixeight
    Sixeight 2021/02/27
  • Go 1.16連載が始まります | フューチャー技術ブログ

    VSCodeも1.53でInsiderでない安定板もM1対応になりますし、GoLandもネイティブ版がリリースされました。Rosetta2でも快適だった環境はますます快適になっています。 それ以外だとlinux/riscv64対応が改良されていて、個人的には気になっています。 ランタイムの変化runtime/metricsパッケージが導入されました。runtimeとかdebugとかさまざまな場所に散っていったメトリックス収集機能が集約されました。今サポートしているのはGC関連のメトリックスと、メモリ関連のメトリックス、goroutine数ですね。 あとは、GODEBUG環境変数にinittrace=1を設定すると、各パッケージのinitで消費している時間やメモリの情報が標準出力に表示されます。Google App EngineやらCloud RunやらCloud FunctionsやらAW

    Go 1.16連載が始まります | フューチャー技術ブログ
    Sixeight
    Sixeight 2021/02/14
  • 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() | フューチャー技術ブログ
    Sixeight
    Sixeight 2021/02/14
  • Go 1.16からリリースされたgo:embedとは | フューチャー技術ブログ

    TIGの伊藤真彦です。 この記事はGo 1.16連載の1記事目です。 トップバッターとしてgo:embedについて記事を書きます。 go:embedとはプロポーザルとなるissueはこちら、2020年9月のissue作成から約5ヶ月の時を経てgo:embedがリリースに含まれることになりました。 embedとは埋め込みという意味です、その名の通りファイル埋め込みをサポートするためのパッケージです。ファイルを読み込むだけならosやio/ioutilでも行うことが可能ですが、go:embedならではの特徴を説明します。 ちなみにio/ioutilはGo 1.16でdeprecatedになりました、詳しくは連載の他の記事で説明します。 利用方法手始めにサンプルコード、main.goを書いてみました。 main.gopackage main import ( _ "embed" "encoding

    Go 1.16からリリースされたgo:embedとは | フューチャー技術ブログ
    Sixeight
    Sixeight 2021/02/14
  • Go 1.16のgo installについて | フューチャー技術ブログ

    はじめにTIG真野です。 Go 1.16連載の2つ目となるこの記事では、Go 1.16で機能追加された go install について説明します。 go installの新機能Go 1.16から go installに新機能が追加されました。go install 自体は従来から存在しているので全く新しいコマンドが増えたわけではなく、機能拡張されたイメージです。 現時点のリリースノートの記載はこちら、元のIssueはこちらです。起票されてから半年弱でリリースに含まれました。 go installの機能拡張部分ですが簡単に言うと、バージョン指定できるようになりました。言ってみればそれだけです。嬉しいこととして、それによってgo.modの書き換え無しにツールなどのインストールを行いやすくなりました。ちなみに、インストールとはコードをコンパイルして、$GOPATH/binとか$HOME/go/bi

    Go 1.16のgo installについて | フューチャー技術ブログ
    Sixeight
    Sixeight 2021/02/14
  • GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々

    アプリケーションが発行するSQLにコメントが埋め込めると便利です。例えば、 /* path/to/logic.go:334 */ SELECT ... のようにSQLに発行元の情報をコメントとして埋め込んでからExecすれば、DB側のログ(general log等)にも記録されるため、SREやDREサイドからも、負荷の高いSQLがアプリケーションのどこから発行されているかが分かりやすくなります。 Goには github.com/shogo82148/go-sql-proxy という、SQL実行をトレースし、フック処理を差し込める便利なライブラリがありますが、今回それにpull requestを送って、SQL実行前にクエリの書き換えができるようにしました。 https://github.com/shogo82148/go-sql-proxy/pull/61 https://github.co

    GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々
    Sixeight
    Sixeight 2021/02/03
  • Gopls on by default in the VS Code Go extension - The Go Programming Language

    (gopls provides IDE features, such as intelligent autocompletion, signature help, refactoring, and workspace symbol search.) When Go modules were released two years ago, they completely changed the landscape of Go developer tooling. Tools like goimports and godef previously depended on the fact that code was stored in your $GOPATH. When the Go team began rewriting these tools to work with modules,

    Gopls on by default in the VS Code Go extension - The Go Programming Language
    Sixeight
    Sixeight 2021/02/02
  • Command PATH security in Go - The Go Programming Language

    Russ Cox 19 January 2021 Today’s Go security release fixes an issue involving PATH lookups in untrusted directories that can lead to remote execution during the go get command. We expect people to have questions about what exactly this means and whether they might have issues in their own programs. This post details the bug, the fixes we have applied, how to decide whether your own programs are vu

    Command PATH security in Go - The Go Programming Language
    Sixeight
    Sixeight 2021/01/23
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

    こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 記事がどなたかの一助になりますと幸いです。 なお記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま

    今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
    Sixeight
    Sixeight 2020/12/07
  • Big Sky :: Go に go:embed が入った。

    Go 言語はシングルバイナリをウリにしたプログラミング言語です。バイナリファイルを1つポンと scp で転送すれば動くのでとても便利です。シングルバイナリとなると当然、画像や HTML といったアセットをバイナリに埋め込みたくなります。 Go 言語ではこれまで go-assets や go-bindata、statik というツールを使う事でファイルのコンテンツをバイナリ化し、変数からアクセスする様にしてきました。 しかしそれらには色々な流儀や OS 間でのまばらな動作など、ユーザにとって納得のいかない物がありました。昨日、Go 言語ではオフィシャルとしてこのファイル埋め込みをサポートする様になりました。Go 1.16 から使える様になります。 cmd/go: add //go:embed support · golang/go@25d28ec · GitHub +3 −3 src/cmd

    Big Sky :: Go に go:embed が入った。
    Sixeight
    Sixeight 2020/10/30
  • Goらしさとは何なのか考える - My External Storage

    Goらしさ」や「Goに入ってはGoに従え」というけれど、「Goらしい」って一体なんだろう?と考えてみる。 TL;DR 後半は完全に私見の域を出ない&&身も蓋もない結論なので、最初に参考情報だけまとめておく。 「Goらしさ」が何を目指しているのか、何を目指す考えが「Goらしさ」なのか知りたいならば、まず言語思想・設計思想を知るべきだろう。 言語思想についてまとめられている文書は次の情報だ。 Go’s New Brand | The Go Blog Go at Google: Language Design in the Service of Software Engineering https://talks.golang.org/2012/splash.slide#1 https://talks.golang.org/2012/splash.article 一言でいうと「Goらしさ」とは

    Goらしさとは何なのか考える - My External Storage
    Sixeight
    Sixeight 2020/10/24
  • 【初中級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い - Qiita

    こちらの記事は、Kyle Quest氏により公開された『50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs』の和訳です。 記事は原著者から許可を得た上で記事を公開しています。 初心者(Total Beginner)向けの和訳は 【初級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い があります。記事は初中級者(Intermediate Beginner)向けの和訳です。 初中級者向け HTTPレスポンスボディのクローズ HTTPコネクションのクローズ JSONエンコーダーが追加する改行 JSONパッケージによるキーと文字列値の特別なHTML文字のエスケープ JSON数値のインターフェース型へのデコード 16進数や非UTF8のエスケープシーケンスがJSON文字列値として使え

    【初中級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い - Qiita
  • Functional Option Pattern

    Fuctional Option PatternはGo言語において構造体の初期化時にオプション引数を与えるためのデザインパターンで、元ネタはRob Pike氏のSelf-referential functions and the design of options 、Dave Cheney氏のFunctional options for frendly APIS です。 Go言語には他の言語でオプション引数やキーワード引数と呼ばれる、省略可能な引数が存在しません。 通常は大きな問題は無いのですが、しかし、構造体の初期化時には、省略可能引数がほしくなる場合もあります。 Dave Cheney氏の記事にもある例を見てみましょう。 例 type Server struct { listener net.Listener } func NewServer(addr string) (*Server

    Functional Option Pattern
    Sixeight
    Sixeight 2020/10/14
  • Go関連の比較的新しいTips - Plan 9とGo言語のブログ

    READMEにpkg.go.devのバッジを貼る godoc.orgはpkg.go.devに移行していくことが告知されているので、新しいプロジェクトではREADME.mdに貼っているバッジを移行しましょう。pkg.go.devのURLやバッジは // バッジ https://pkg.go.dev/badge/<package path> // リンク https://pkg.go.dev/<package path> の形を取ります。例えばgithub.com/lufia/backoffの場合は以下のように書きます。 # Backoff ...summary... [![GoDev][godev-image]][godev-url] ...description... [godev-image]: https://pkg.go.dev/badge/github.com/lufia/back

    Go関連の比較的新しいTips - Plan 9とGo言語のブログ
    Sixeight
    Sixeight 2020/07/30
  • Goのバイナリへのファイル同梱はstatikで決まり | おそらくはそれさえも平凡な日々

    https://github.com/rakyll/statik Goのバイナリにファイルを同梱するという誰もが欲しいはずのものがなかなか決定版がなく、go-bindataがメンテを終了し、go-assetsもいまいちメンテが滞っているので、statikを使うことにしました。作者のrakyllさんも実績のある方なので大丈夫でしょう。 statikも少しpull requestの取り込みが滞っていたのですが、試しにpull requestを送ってみたらちゃんと取り込まれたので大丈夫そう。 https://github.com/rakyll/statik/pull/61 元々、ファイル単体を取得する分には問題なかったのですが、ファイルシステムとして走査しようとするとうまく辿れない問題があり、このpull requestで修正しました。ですのでより安心して使えるでしょう。 http.FileSy

    Goのバイナリへのファイル同梱はstatikで決まり | おそらくはそれさえも平凡な日々
    Sixeight
    Sixeight 2019/03/25
  • Essential Go

    Essential Go is a free book about Go programming language. It's part of Essential Programming Books. It's written to provide clear and concise explanation of topics for both beginner and advanced programmers. Most examples are linked to online playground that allows you to change the code and re-run it. You can also quickly navigate to desired content using table of content on the left and search

    Essential Go
    Sixeight
    Sixeight 2018/03/05