タグ

golangに関するtuneのブックマーク (64)

  • Go Tips連載8: logパッケージでログ出力している場所の情報を出す | フューチャー技術ブログ

    Go Tips連載の第8弾です。 Go tipsということで、シンプルネタを投稿します。 検索窓に入れると「printデバッグでいつまで消耗しているの?」とか「printデバッグにさようなら」とかサジェストされつつも、根強く生き残っているのがprintデバッグです。むしろ、非同期だったり並列処理だったりプロセスまたぎ、ホストまたぎが増えてくると、同期的に動くデバッガーが逆に使いにくかったりもありますし、デバッガーを使うにしてもブレークポイントを仕掛ける場所のあたりをつけるためにprintデバッグの力を借りたりもあるし、いっそのことprintデバッグの方が進化しろ、と個人的には思っています。分散トレーシングは進化したprintデバッグだと思っています。 Goでprintデバッグの友といえば標準ライブラリのlogパッケージですね。logパッケージには色々カスタマイズポイントがありますのでそれを

    Go Tips連載8: logパッケージでログ出力している場所の情報を出す | フューチャー技術ブログ
    tune
    tune 2021/02/11
    こんな機能があるの知らなかった
  • go-cmpを使う理由とTipsの紹介 - 技術メモ

    はじめに これは Go 4 Advent Calendar 2020 8日目の記事です。 Goのテストにおいて、構造体を含めて型の値を比較したいという場合は往々にしてあります。ロジックの結果はなんらかの値として作用することが多いですから、型の値を比較したい、というのは自然です。私は型の値が等価であるかどうか判定するために、go-cmp というライブラリを使うことが多いです。 github.com しかしGoにおける等価性の仕様は決まっていますし、標準ライブラリの reflect パッケージにも DeepEqual という deeply equal, かどうか判定するメソッドがあります。そこで記事ではなぜわざわざ go-cmp を使っているのかという理由と、go-cmp を使ったときにどのようにして使うか?という go-cmp の使う上でよく使う以下のTipsを提供したいと思います。 Ti

    go-cmpを使う理由とTipsの紹介 - 技術メモ
  • Goのデバッグ環境 on VSCode | フューチャー技術ブログ

    はじめにこんにちは。TIG/DXユニットの富山です。 私の使用するテキストエディタはVim一択でしたが、最近はVSCode浮気気味です(言わずもがな Vimプラグインは入れています) 今回はVSCodeGo言語用のデバッグ環境をテーマします! 環境構築前提条件: VSCodeがインストール済であること Goがインストール済であること Step 1:プラグインのインストールGoogleが公開しているVSCode用のGoプラグインである、Go for Visual Studio Codeをインストールします(2020年6月に開発管理がMicrosoftからGoogleGo開発チームへ移管されました)。 インストールが終わったら、Goプラグインに必要な各種ツールをインストールしていきます。 コマンドパレットを開く(Windows: Ctrl + Shift + p / Mac: Comma

    Goのデバッグ環境 on VSCode | フューチャー技術ブログ
    tune
    tune 2020/12/28
  • Go1.16からは go get は使わず go install を使おう - Qiita

    この記事はGo Advent Calendar 2020 16日目の代打記事です。奇しくも16日目にGo1.16の話をすることになりました。 【追記】タイトル改題しました 状況が落ち着いてだいぶ経ったのと、未だに多くの方にこの記事を見ていただけていることから、Go1.16での変更というより、今を生きる私達がどうすればいいか、という点にフォーカスしたタイトルに改題しました。文に変更はありません。一応注記すると、go get が廃止になったわけではなく、普段の開発フローで使うことはまずなくなった、という意味です。(一通り読んでいただければお分かりいただけるかと。) 【追記】Go1.18について ついに待望のGo1.18がリリースされましたね! https://go.dev/doc/go1.18#go-command そして予告通り go get によるインストール機能は削除されました。どうし

    Go1.16からは go get は使わず go install を使おう - Qiita
    tune
    tune 2020/12/20
    Go1.16に置き換える時に読み直すと思う。この辺ごちゃごちゃしていたので整理ありがたい。
  • 結局、Go言語をやめる理由はなかった件 - Qiita

    この記事は Go 2 Advent Calendar 14日目の穴埋め記事です。 はじめに @okdyy75 さんによる Go 5 Advent Calendar 14日目の の記事「だから僕はGo言語を辞めた」 が「ベンチマークっていうのはこうやるんだよ」というのを説明するために反面教師的な意味で良い教材だと思ったので、反証記事を書きたいと思います。 ベンチマークを取りながらコードを改善して、最終的にGoは遅くないからやめる必要はないということ、そして、なぜ遅いという結論になってしまったのかを掘り下げていきたいと思います。 下準備 幸いなことに、ベンチマークのソースコードがGitHubにある ので、こちらを実行しながら問題点を改善していきましょう。 ちゃんとコードが上がっているのは素晴らしいですね! 一方で、元記事には測定環境が明記されていませんでしたので、同じ環境で測定することはできま

    結局、Go言語をやめる理由はなかった件 - Qiita
    tune
    tune 2020/12/16
    ツールの使い方が参考になる。便利なものは貪欲に学んでいかないと
  • VS CodeのGo言語テストコード生成ツールを使ってみたらめちゃくちゃ便利だった話とか - kdnakt blog

    年末年始はGoのテストコードを書いて過ごしている。 そんなことよりそろそろ2019年の抱負的なものを書かないと……とは思うものの、振り返り系記事ばかりで技術系記事がおろそかになってもあれなので、テストコードを書いていて学んだことをまとめておく。 [Go言語用VS Codeセットアップ手順] [テストコード・スケルトン自動生成] [関数の戻り値を比較する3つの方法] 等価演算子 (==, !=) で比較する Object.Equal() で比較する リフレクションを利用して reflect.DeepEqual() で比較する [まとめ] [Go言語用VS Codeセットアップ手順] 実行環境はMac 10.14.2 + VS Code 1.30.1。 VS Codeの左側のメニューの5番目の四角いアイコンが「Extensions」、拡張機能のメニュー。検索ウィンドウに「go」と入力するとMi

    VS CodeのGo言語テストコード生成ツールを使ってみたらめちゃくちゃ便利だった話とか - kdnakt blog
  • GoLandで書く効率的なGoのユニットテスト(Table Driven Test) - WHITEPLUS TechBlog

    この記事はWHITEPLUSのカレンダー | Advent Calendar 2018 - Qiita 5日目になります。 こんにちは、WHITEPLUSのサーバーサイドエンジニア八巻です。 マネージャーをしながら、リネットの設計リードをしたりしています。 今日は設計の検証に欠かせないユニットテストについて書きます。 ユニットテストのパターンの一つとしてData Driven Testというものがあります。Goの場合はTable Driven Testとして知られていて基的には同じものです。 package stringutil import "testing" func TestReverse(t *testing.T) { cases := []struct { in, want string }{ {"Hello, world", "dlrow ,olleH"}, {"Hello,

    GoLandで書く効率的なGoのユニットテスト(Table Driven Test) - WHITEPLUS TechBlog
  • GoのInterfaceの作法 "Accept Interfaces, Return structs" - y-zumiの日記

    はじめに Goにおける抽象化の方法にインターフェースがあります。インタフェースをうまく使うことにより具体的な実装を隠し、疎結合な実装ができるようになります。 これにより、テストがやりやすくなったり、リファクタリングの影響範囲を小さくできるなどのメリットがあります。インターフェースがないコードは振る舞いで共通化することができないため、冗長かつ密結合なシステムになってしまいます。 今回はGoのインターフェースの基的な考え方である "Accept interfaces, Return structs" について紹介します。 "Accept interfaces, Return structs" とは 直訳で 「インターフェースを受け入れて、構造体を返す」 ですが、この考え方はJack Lindamood氏が過去に提案したものです。 GoのCodeReviewのドキュメントには以下のように書かれ

    GoのInterfaceの作法 "Accept Interfaces, Return structs" - y-zumiの日記
    tune
    tune 2019/08/15
  • Go 1.13 に向けて知っておきたい Go Modules とそれを取り巻くエコシステム - blog.syfm

    はじめに 今年の 8 月にリリースが予定されている Go 1.13 では、Go 1.11 で導入された Go modules に加え、Go module proxy といった新しいエコシステムが登場します。 そこで、そもそも Go modules は何を行っているのかや、何ができるのか、どういった要素で構成されているのかを紹介します。 また、古い Go バージョンから Go 1.13 へアップデートする場合や、 dep や Glide といったベンダリングツールから Go modules へ移行する際の懸念点も併せて紹介します。 先日発表した "Go Modules and Proxy Walkthrough" はこのポストがベースになっています。 TL;DR な人はスライドを見るのがおすすめです。 speakerdeck.com Go Modules Go modules という仕組みは

    Go 1.13 に向けて知っておきたい Go Modules とそれを取り巻くエコシステム - blog.syfm
    tune
    tune 2019/08/15
    まとまっていてわかりやすかった。
  • 【Go言語】modulesについて理解するために過去から調べてみた - Qiita

    はじめに go1.11から導入されたmodulesを使うにあたって、あまりよく分かっていなかったので ちょっと過去からmodulesに至るまでの問題や詳細な動きなどを調べてみました。 その時の備忘録を残しておきます。 理解するだけなので、情報が無い部分については自分で調べて、すでに調査済みの箇所は 多くの先人たちの記事を参考にさせていただきました。ありがとうございます。 ライブラリのインストール Go get go get https://github.com/...で$GOPATH/src配下にライブラリをダウンロードする事で、 importで指定してライブラリを使用する事が出来ます。 srcやpkg、binの詳細は以下を参照 プログラムの全体構成 上述の構成から明確に判断できるのは、binディレクトリの下にコンパイル後の実行可能ファイルが保存され、pkgの下に関数パッケージが保存され、

    【Go言語】modulesについて理解するために過去から調べてみた - Qiita
    tune
    tune 2019/06/10
    Golangのバージョン管理の仕組み
  • 「Go Conference 2019 Spring」に参加してきた! - Fumiエンジニアブログ

    はじめに gocon.connpass.com It's time to GO!#gocon pic.twitter.com/oxBUGrwHmS— 手塚竜太 Ryuta Tezuka (@Tzone99) 2019年5月17日 入館証 とても重要なお知らせです。お帰りの際は、入館証は、受け取った受付までお返しください。出た場所に箱がありますが *箱には入れないでください* #gocon pic.twitter.com/zuWDaQvp6G— kuma @ Go Conference Tokyo Spring 2019 (@kumakumakkk) 2019年5月18日 Wantedly Techbook Wantedly Techbookデプロイされました!!! 一箱、机の下に眠っておりました🙇‍♂️ #gocon #golang pic.twitter.com/uObnnLiD6v—

    「Go Conference 2019 Spring」に参加してきた! - Fumiエンジニアブログ
    tune
    tune 2019/05/19
    すごい大作まとめだ!
  • Go言語のio.Pipeでファイルを効率よくアップロードする方法

    パイプ(土管)をGo言語でも楽しめるはじめに前回はGo言語のmime/multipartパッケージによるファイルのアップロードを見ましたが、パフォーマンスの特徴にはあまり触れませんでした。 大規模なETLジョブや、制限の厳しいサーバーレスの環境などでは、ファイルを扱うプログラムのリソースを慎重に考える必要があります。記事ではメモリ使用量を大幅に減らすio.Pipeの使い方を見ていきます。 全てのコードはサンプルレポジトリにあります。 同期処理にある問題前回のコードをもう一度見てパフォーマンスを考えてみましょう。 // ファイルを開く file, _ := os.Open(filename) // リクエストボディのデータを受け取るio.Writerを生成する。 body := &bytes.Buffer{} // データのmultipartエンコーディングを管理するmultipart.W

    Go言語のio.Pipeでファイルを効率よくアップロードする方法
    tune
    tune 2019/05/06
  • Big Sky :: golang の sync パッケージの使い方

    golang と言えば非同期に特化した言語ですが、慣れない内は簡単な非同期しか使えません。しかし sync パッケージを知る事でもっとカジュアルに、かつ確実な非同期処理を行う事が出来る様になります。 今日はそんな sync パッケージについて説明してみたいと思います。 sync.Mutex ご存じ sync.Mutex です。皆さんが一番使う排他制御だと思います。 package main import ( "fmt" "runtime" "sync" "time" ) func parallel(wg *sync.WaitGroup) { fmt.Println("博") time.Sleep(100 * time.Millisecond) fmt.Println("多") time.Sleep(100 * time.Millisecond) fmt.Println("の") time.

    Big Sky :: golang の sync パッケージの使い方
    tune
    tune 2019/04/22
  • Go言語の並行処理デザインパターン by Rob Pike 前編 - Qiita

    package main import ( "fmt" "math/rand" "time" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) rand.Seed(time.Now().UnixNano()) c := boring("boring!") // Function returning a channel. for i := 0; i < 5; i++ { fmt.Printf("You say: %q\n", <-c) } fmt.Println("You're boring: I'm leaving.") } func boring(msg string) <-chan string { c := make(chan string) go func() { // We launch the goro

    Go言語の並行処理デザインパターン by Rob Pike 前編 - Qiita
    tune
    tune 2019/04/19
    わかりやすい
  • 【初級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い

    こちらの記事はGo言語初心者向けのサイト「50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs」の中から初級編だけを日語に翻訳したものとなります。特にGoを始めたばかりの方にはとても役立つ情報かと思いますので是非ご覧ください。また、多少日語がおかしい部分あるかもしれませんがご了承ください。もし分かりづらい部分は直接家サイトを参照頂ければ幸いです。 概要Goはシンプルで楽しい言語ですが、他の言語と同様に、いくつかの問題点があります。それらの多くの問題点は、Goのせいではありません。あなたが他の言語から来ているならば、これらの間違いのいくつかは自然な罠です。 公式情報、wiki、メーリングリストでの議論、Rob Pikeによる素晴らしい投稿やプレゼンテーション、そしてソースコードを読むことで言語を

    【初級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い
    tune
    tune 2019/04/13
    割と知っていたけど、翻訳していただいて読みやすかった! ありがとうございます。
  • Mac OS X(Mojave)にGo環境をエラーと戦いながら構築する[VSCode版]|てくてくぷれいす

    こんにちは,しまさん(@shimasan0x00)です. 最近は色んな言語に興味があって,JS,GoJuliaScalaRust,…と目移りしています. そんな私なのですがGoを始めたい!!となったときにすぐに始められるように環境構築しよう!!と思いました. MacVSCode上にGoの開発環境を整えるのがこの記事の目標です. 途中色んなエラーと戦いましたが,最終的にはXCode’s command line toolsをインストールしなおすことでなんとかなりました.

    Mac OS X(Mojave)にGo環境をエラーと戦いながら構築する[VSCode版]|てくてくぷれいす
    tune
    tune 2019/04/07
    “xcode-select --install” で対処できました! 感謝です。
  • Goの標準プロジェクトレイアウトを読み解く - Tech Do | メディアドゥの技術ブログ 

    The Go gopher was designed by Renée French and has a CC BY 3.0 license. メディアドゥの沓名と奥野です。 今回は、弊社内での複数のGoプロジェクトの構成を整理する際に参考にした情報をまとめます。 背景 最近、弊社内にてGoで書かれたプロジェクトが増えてきました。 今後もGoプロジェクトは増加する予定のため、プロジェクト間で共有したいコードや、フォルダ構成の統一化を今のうちに行おうと思い立ちました。 ここでは、企業向けに定義された「GitHub - golang-standards/project-layout: Standard Go Project Layout」を参考に、Goプロジェクトのディレクトリ構成のルールについてまとめていきたいと思います。 前提 ここで取り扱う内容は、あくまでGoプロジェクトのディレクトリ

    Goの標準プロジェクトレイアウトを読み解く - Tech Do | メディアドゥの技術ブログ 
    tune
    tune 2019/02/23
  • Hugo :: A fast and modern static website engine

    Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.

    Hugo :: A fast and modern static website engine
    tune
    tune 2018/09/23
    golang製の静的サイトジェネレーター
  • GoのためのGo

    Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。

    tune
    tune 2017/02/04
  • GolangでFlame Graphを描く

    アプリケーションのパフォーマンス問題の解決やチューニングで大切なのは問題のコアやボトルネックに最短パスで到達することである. 基的なパフォーマンス分析の入り口はアプリケーションのスレッドがon-CPUで時間を消費しているかoff-CPUで時間を消費しているかを理解するところから始まる.on-CPUの場合はそれがuserモードかkernelモードかを特定し,さらにCPUプロファイリングによってどのcode pathがCPUを消費しているのかの分析に向かう.off-CPUの場合はI/OやLock,pagingといった問題の分析に向かう. Flame Graphはon-CPUでのパフォーマンスの問題が発覚した時に行うCPUプロファイリングを助ける.どのcode pathがボトルネックになっているのかを1つのグラフ上で理解できる.記事ではFlame Graphとは何か? なぜ必要なのか? を解

    tune
    tune 2016/11/23
    golangすげーな