タグ

goに関するono_matopeのブックマーク (388)

  • 【Go+VCR】外部APIとの通信を保存してテストに使用する話

    Go3 Advent Calendar 2019記事は Go3 Advent Calendar 2019 の 8日目 の記事です。 ではでは、早速題に入っていきます。 モック使ってますか?みなさんモックコードは書いていますか? テストコードを書いているなら、ほぼ必ず登場するあのモックです。 DB処理や関数のモックなどいろいろありますよね。 そんなモックコードですが、作ったり管理するのめんどくさいなぁとか思ってないですか? モックだからといって雑なコードになっていませんか? 今回は、外部API通信のモック化にフォーカスし、 モックコードの作成・管理コストを軽減する VCR ライブラリ を紹介します。 VCR ライブラリ とは?VCR(Video Cassette Recorder)とは、通信を保存し、再生するライブラリです。 つまり、APIリクエストの初回通信の内容を保存し、 次回以降そ

  • So It Goes: Sending SMS with Golang

    Whether stored on your phone, on Post-It notes, or in a book, everyone has their share of quotes that they look at to seek inspiration. Personally, I follow @Kurt Vonnegut. No, not the real (dead) Vonnegut: just a human or bot that tweets out some of his famous quips. Remembering Vonnegut, an idea struck: what better way get started with Twilio than to send Vonnegut quotes to all of your friends?

    So It Goes: Sending SMS with Golang
  • astutil.Applyで抽象構文木を置き換える #golang - Qiita

    はじめに Goには、標準パッケージ以外にも準標準にあたるgolang.org/x/以下で管理されているパッケージが存在します。ここで管理されているパッケージは、Go体と同様にGoチームによって管理され、コントリビュートの方法も概ね同じです。 この準標準パッケージには、さまざまなパッケージが存在します。これらは標準パッケージになるほど汎用的だったり、完成度は高くないはないですが、それでも十分に有用です。golang.org/x/tools/go/ast/astutilパッケージ(以降、astutilパッケージと表記)もそのひとつです。 astutilパッケージは静的解析で使用すると便利なパッケージで、抽象構文木(Abstract Syntax Tree, AST)に関連する便利な機能を提供します。静的解析や抽象構文木については、"goパッケージで簡単に静的解析して世界を広げよう"という記事

    astutil.Applyで抽象構文木を置き換える #golang - Qiita
  • go/typesパッケージを使い変数名をリネームしてみる #golang - Qiita

    はじめに Goには、gorenameという識別子をリネームするリファクタリングツールがあります。 以下のようにgo getすることで使用することができます。 また、「gorenameをライブラリとして使う」とう記事にも書いたとおり、gorenameはライブラリとしても利用することができます。 この記事では、gorenameほどは高機能では無いものの、ローカル変数のリネームをgo/typesパッケージの提供する機能で実装してみます。 なお、この記事を書いた時点のGoの最新バージョンは1.7.4です。 指定した位置にある識別子を取得する gorenameもそうですが、多くのリファクタリングツールでは、「何」を対象にリファクタリングを行うか、以下の2種類の方法で指定することが多いでしょう。 ずばり対象とするものを指定(この場合だと対象となる識別子) 対象となるもののソースコード上の位置 ソースコ

    go/typesパッケージを使い変数名をリネームしてみる #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    types.Info, types.Object の使い方理解
  • go/typesパッケージを使って型チェックを行なうハンズオンを作った #golangtokyo - My External Storage

    なぜ作ったのか 今回golang.tokyoで静的解析のハンズオンをすることになった。 golang.tokyoでは以前から静的解析を含めたハンズオンを提供していたが型チェック(go/types)についてのハンズオンはまだなかった。 私自身今年のはじめあたりから静的解析を初めたが、まだgo/typesパッケージはあまり触ったことがなかったのでこの機会に学習することにした。 参考にした記事 今回の資料を作るにあたって以下の記事を参考にした。また、そもそもとして、ハンズオン資料のネタ出しは@tenntennさんにしてもらった。 (全てのネタをハンズオンに含めることはできなかったのだが、)自分にとっていい具合にストレッチした課題(ネタ)だった。圧倒的に感謝! go/typesのGodoc https://golang.org/pkg/go/types/ 当たり前だがgo/typesのGo Doc

    go/typesパッケージを使って型チェックを行なうハンズオンを作った #golangtokyo - My External Storage
  • GoのためのGo

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

    ono_matope
    ono_matope 2020/01/24
    最高
  • 抽象構文木(AST)をいじってフォーマットをかける #golang - Qiita

    はじめに Goには、gofmtというコマンドがあることはご存知かと思います。 そして、そのフォーマットがGoコミュニティの標準となっています。 go/formatパッケージでは、gofmtと同じスタイルのフォーマットでソースコードを整形することができます。 また、go/formatパッケージを使うと、ASTについても整形することがきます。 この記事では、ASTのノードをいじって、整形する方法について説明します。 なお、この記事を書いた2016年12月現在のGoのバージョンは1.7.4が最新です。 ASTをいじる ASTをいじると書きましたが、具体的に何をするんでしょうか? ここでは、AST上のノードを別のノードに入れ替えたり、ノードのフィールドを差し替えることを指しています。 たとえば、x+yという式があった場合、このxとyをそれぞれ10と20に置き換えて、10+20のような式に変えたいと

    抽象構文木(AST)をいじってフォーマットをかける #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    なるほど!
  • Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita

    はじめに タイトルを見て、「はて?何を言ってるんだろう」と思った方もいるでしょう。 その通りです。通常、抽象構文木(AST)を取得するには、「ASTを取得する方法を調べる」で解説したように、go/parserパッケージの関数を使ってソースコードをパースする必要があります。 しかし、この記事では温かみのある手入力をすることで、日頃なんとなく取得しているASTがどういうノードで構築されているのか、最低限必要なフィールドは何なのかということを改めて知ることを目的としています。 なお、この記事を書いた時のGoの最新バージョンは1.7.4です。 今回作るコード 今回はかのプログラム言語Cやプログラミング言語Goで有名なHello, Worldを出力するプログラムを作りたいと思います。 具体的には、以下のようなコードです。 なお、せっかくなので、ここではGoっぽく、Hello, 世界としています。 p

    Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    なるほどー
  • vim-goを使うなら使用したいコマンド集と設定 - Qiita

    こんにちわ 最近NeoVimに乗り換えて、vim-goプラグインを使用しています。 vimmerとgopherにとって素晴らしいプラグインなので、 共有と自分用メモという意味で記事を書いています。 各項目をクリックすると詳細説明に飛びます。 tutorialの日語訳も合わせて読むと良いと思います。 目次 コマンド集 定義へ移動 移動から戻る 画面分割して定義へ移動 インターフェイス実装一覧 定義参照一覧 タグ生成 タグの削除 キーなしの構造体定義にキーを追加 構造体のキー初期値を追加 if err != nilを追加 構文チェック 実行 テスト実行 テスト個別実行 カバレッジを見る カバレッジをブラウザで見る 関数と型宣言一覧 インターフェイスのメソッド雛形生成 リネーム テキストオブジェクト 設定 スニペット 保存時自動Import 保存時チェック GoRunやGoTest時の画面分割

    vim-goを使うなら使用したいコマンド集と設定 - Qiita
  • try - Go の新しいエラーハンドリング (Go 1.14で導入予定)(でしたが,却下となりました) - Qiita

    Go 1.14 で try というシンプルなエラーハンドリング方法が導入予定です。 2019/07/17 追記 議論の結果、try は一旦却下となりました。詳しくは提案者 Robert Griesemer 氏のコメントを参照下さい。 error Go でのエラーハンドリングはややタイプ数が多い。

    try - Go の新しいエラーハンドリング (Go 1.14で導入予定)(でしたが,却下となりました) - Qiita
  • gorilla/csrf で安全なWebフォームを作る - 小野マトペの納豆ペペロンチーノ日記

    こんにちは。GoでWeb開発していますか?私はしていません。Goに限らず、既成のWebアプリケーションフレームワークを使わずに自前でWebフォームを作る場合、なにも考えずに書くと CSRF (Cross Site Request Forgery) 脆弱性を作りこみ、不正なユーザー操作を実行されてしまう可能性があります。 ダメな例 例えば以下のGoコードで作成されるフォームにはCSRF脆弱性があります。SubmitSignupForm ハンドラは、受け取ったリクエストが自分のサイト上のフォームからサブミットされたものかチェックしていないので、攻撃者が他のサイト上のフォームを使い、第三者のユーザーのブラウザで任意の操作を実行させることができてしまいます。 func main() { r := mux.NewRouter() r.HandleFunc("/signup", ShowSignupF

    gorilla/csrf で安全なWebフォームを作る - 小野マトペの納豆ペペロンチーノ日記
    ono_matope
    ono_matope 2019/06/05
    書きました。
  • Go 1.11 の modules・vgo を試す - 実際に使っていく上で考えないといけないこと #golang | Wantedly Engineer Blog

    時間の 8/25 早朝,Go 1.11 がリリースされました 🎉 🎉 https://go.googlesource.com/go/+/go1.11 Go 1.11 には WebAssembly 対応を始めとするド派手な新機能からコアライブラリ・ツールチェインの細かな改善まで,いろいろな変更が入っています.個人的には golang.org/x/tools/go/packages が気になっていました../... がうまく扱える API かな?とか思ってたけど,内部で普通に go list 叩いちゃってるのがかわいい. The latest Go release, version 1.11, arrives six months after Go 1.10. Most of its changes are in the implementation of the toolchain,

    Go 1.11 の modules・vgo を試す - 実際に使っていく上で考えないといけないこと #golang | Wantedly Engineer Blog
  • Integration Tests in Go – Philosophical Hacker

    Integration Tests in Go2016-01-22 Although Go has support for testing built in to its toolchain, certain kinds of testing can be a bit tricky. For example, it may not be immediately obvious how you would go about writing and running integration tests in go. This post contains info on how to write and run integration tests for your go code. Clarifying Terms As I’ve said before, many terms in softwa

    Integration Tests in Go – Philosophical Hacker
  • research!rsc: A Tour of Versioned Go (vgo) (Go & Versioning, Part 2)

    For me, design means building, tearing down, and building again, over and over. To write the new versioning proposal, I built an prototype, vgo, to work through many subtle details. This post shows what it's like to use vgo. You can download and try vgo today by running go get golang.org/x/vgo. Vgo is a drop-in replacement for (and a forked copy of) the go command. You run vgo instead of go, and t

    ono_matope
    ono_matope 2018/02/24
    とりあえず前半履修した。普通にreproducible buildを するだけなら何も考えずに使えるっぽい。
  • research!rsc: Go += Package Versioning (Go & Versioning, Part 1)

    We need to add package versioning to Go. More precisely, we need to add the concept of package versions to the working vocabulary of both Go developers and our tools, so that they can all be precise when talking to each other about exactly which program should be built, run, or analyzed. The go command needs to be able to tell developers exactly which versions of which packages are in a particular

  • Stream & Go: News Feeds for Over 300 Million End Users - Stream Tech Stack

    By Thierry Schellenbach, CEO, Stream. Stream is an API that enables developers to build news feeds and activity streams (try the API). We are used by over 500 companies and power the feeds of more than 300 million end users. Companies such as Product Hunt, Under Armour, Powerschool, Bandsintown, Dubsmash, Compass and Fabric (Google) rely on Stream to power their news feeds. In addition to the API,

    Stream & Go: News Feeds for Over 300 Million End Users - Stream Tech Stack
    ono_matope
    ono_matope 2018/01/20
    Go+RocksDB+Raftスタック。特にRaft実装がOSSで存在してるのが強い
  • Go 1.9 Release Notes - The Go Programming Language

    Introduction to Go 1.9 The latest Go release, version 1.9, arrives six months after Go 1.8 and is the tenth release in the Go 1.x series. There are two changes to the language: adding support for type aliases and defining when implementations may fuse floating point operations. Most of the changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains

    Go 1.9 Release Notes - The Go Programming Language
  • Peter Bourgon · A theory of modern Go

    2017 06 09 tl;dr: magic is bad; global state is magic → no package level vars; no func init The single best property of Go is that it is basically non-magical. With very few exceptions, a straight-line reading of Go code leaves no ambiguity about definitions, dependency relationships, or runtime behavior. This makes Go relatively easy to read, which in turn makes it relatively easy to maintain, wh

    ono_matope
    ono_matope 2017/06/11
    グローバル変数の使用は実際の依存を隠蔽し、読者のメンタルモデル構築を阻害するから使うべきではない論
  • Go 言語のプロファイル機能とネットワークコネクションにまつわるトラブルシューティング

    ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog インフラエンジニア見習いの森です。これまで数年ほどサーバーサイドエンジニアとして開発ばかりをしてきた人が最近インフラエンジニアになりました。 3月末に開催された Go Conference 2017 Spring で開発チームの後藤から弊社で開発・運用している AWS S3 互換の分散オブジェクトストレージ Dragon についての発表がありました。 Goでヤフーの分散オブジェクトストレージを作った話 私は Dragon の運用を担うチームに所属しており、稿ではその業務の中で発生したトラブルシューティングについて紹介したいと思います。 分散オブジェクトストレージ Dragon で発生していた課題 Dragon で gorout

    Go 言語のプロファイル機能とネットワークコネクションにまつわるトラブルシューティング
  • The State of Go

    The State of Go Where we are in May 2017 Francesc Campoy Google Developer Advocate Recording A recording of this talk is available here. 2 Time flies Go 1.7 is already 9 months old! Go 1.8 was released on February 16th. On May 1st we entered the release freeze for Go 1.9 Go 1.9 will be released early August. 3 Notes The slides are available on /talks/2017/state-of-go-may.slide Most of the code exa