タグ

goに関するcpp_0302のブックマーク (51)

  • 今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ

    こんにちは、@p1assです。 最近研修で Go を書いていて、その際にいくつか質問をされるのですが、聞いてみると前にも答えたような質問が多かったので、これを機にブログに参考リンクをまとめようと思います。 質問された際にすぐ答えられない質問も数多くあり、調べたり教えてもらったりすることで様々なことを再発見できました。 この記事では、質問に対する回答をできるだけ公式に近い文章を引用する形で書き記します。私個人の考えは別の段落になるようにして、事実と意見を区別するように心がけています。 なにか誤りを見つけた際は GitHub で PR を投げていただけると助かります。 言語仕様 関数の引数は値渡しか参照渡しか? Go はすべて値渡し (pass by value) です。 ポインタの場合は、ポインタそのものがコピーされポインタの指し示す先の値はコピーされません。 Go の多値返却はタプルか?

    今までにGoでよく聞かれた質問とその参考リンク - ぷらすのブログ
    cpp_0302
    cpp_0302 2021/06/04
  • Go database/sql tutorial

    The idiomatic way to use a SQL, or SQL-like, database in Go is through the database/sql package. It provides a lightweight interface to a row-oriented database. This website is a reference for the most common aspects of how to use it. Why is this needed? The package’s documentation tells you what everything does, but it doesn’t tell you how to use the package. Many of us find ourselves wishing for

    cpp_0302
    cpp_0302 2021/03/15
    [database/sql][sql]
  • Go database/sql の操作ガイドあったんかい

    database/sqlを触ってますが、いまいちしっかり説明してくれるリソースがないなあと思ってたら、goのwikiにGo database/sql tutorialがありました! ということで試しながらポイントを整理してきます。 Overview DBへのアクセスには sql.DB を利用 sql.DB は指定したDriverへアクセスを抽象化した存在 これによってDriverがPostgresでも、MySQLでも統一した操作を提供 Importing a Database Driver 利用には database/sql とDriverパッケージの二つが必要 一般的にDriverパッケージは依存するため使わない database/sql を介してアクセス Dirver自体は次のようにすることでDriverとして登録(Go import _ ってなんだみてね) wikiではmysqlです

    cpp_0302
    cpp_0302 2021/03/15
    [database/sql][sql]
  • Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング

    はじめに メルペイ エキスパートチームのtenntennです。 メルカリグループでは、毎週金曜日にGo Fridayという社内勉強会を開催しています。 毎週やっているとそれなりに知見が溜まってくるので、定期的に”こぼれ話”としてブログを書こうという話になりました。 今回の記事では、先日のGo Fridayで話題にあがった非公開な機能を使ったテストについて扱いたいと思います。 なお、Goにおけるテストの手法やテストしやすいコードの書き方については、GopherCon 2017でも発表があったmitchellhさんの”Advanced Testing with Go”(スライド/動画)が参考になります。テーブル駆動テストやテストヘルパーなど非常に勉強になるので、まだ見たことのない方はぜひスライドや動画をご覧ください。 TL;DR Goのテストではテスト対象とテストコードを別パッケージにできる

    Go Fridayこぼれ話:非公開(unexported)な機能を使ったテスト #golang | メルカリエンジニアリング
  • 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
  • golang.org/x/tools/go/packages による構文解析と型解析 - GeekFactory

    golang.org/x/tools/go/packages を利用すると,抽象構文木や型情報を利用したコードが簡単に書けるので調べてみました.日語の情報があまりないようです. 抽象構文木を表示する Goのソースコードを読み込むには,packages.Load 関数を利用します.packages.Load 関数の引数にはどんな情報を解析してほしいかという設定を渡します.抽象構文木(AST)を取得するには下記のコードのようにフラグを渡します.ドキュメントを読むと packages.NeedSyntax だけで良さそうなのですが,実際に実行してみると複数のフラグが必要でした. Load 関数の引数にはパッケージ名の配列を渡します../helloworld, os/exec, ./... のような表記が使えます. package main import ( "go/ast" "log" "os

    golang.org/x/tools/go/packages による構文解析と型解析 - GeekFactory
  • go言語でASTの解析にgo/typesの機能を使うことの威力について - podhmo's diary

    goはASTの解析が手軽なのが便利。ところでこれにgo/typesの機能を使うととても便利になる。その威力を一番わかりやすく体験できそうな例を思いついたので紹介する。 (実際にはgo/typesの機能の使いかたはこれいがいにも色々ある) go/types? go/typesというのは概ねgoで型情報を扱う時に使うことになるパッケージ。(ちなみにgolang.org/x/tools/go/loader経由でソースコードを読むと自動で使われるので個人的にはloader経由で使うことが多い) importしたパッケージのpathを変える importしたパッケージのpathを変えてみたい。例えばの例なのでテキトウだけれど。fmtパッケージのimportをfmt2パッケージのimportに変える例を紹介する。例えば以下の様なコードが fmt.Println("hello") 以下の様になってくれれ

    go言語でASTの解析にgo/typesの機能を使うことの威力について - podhmo's diary
  • GoのためのGo

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

    cpp_0302
    cpp_0302 2021/03/01
    コード解析等において有用
  • Goの静的解析ツールを簡単に使うためのエコシステムについて考える #golang - tenntenn.dev

    はじめに 稿はGo Advent Calendar 2019の25日目の記事です。 筆者は静的解析が大好きでオリジナルの静的解析ツールを作ったり、静的解析ネタで登壇したりしています。 https://github.com/gostaticanalysis https://github.com/gcpug/zagane Mercari Advent Calendar 2018の“Goにおける静的解析のモジュール化について”という記事をで書いたように、Goの静的解析ツールは再利用性を考え、モジュール化する流れになっています。 稿では静的解析のモジュール化における課題と今後のエコシステムを考察します。 静的解析のモジュール化 モジュール化は、静的解析ツールをgolang.org/x/tools/go/analysisパッケージ(以下、analysisパッケージ)のAnalyzer構造体の単位

  • google/wireを使ってGoでDI(dependency injection)してみる | ビジネスとIT活用に役立つ情報(株式会社アーティス)

    フローを把握する wireを使ってのDIは、以下のフローになります。 「DIしたい対象を生成する関数」を生成する関数を定義する wireコマンドで、上記のファイルから「DIしたい対象を生成する関数」をジェネレートする その関数を利用する 他の言語のDIコンテナと比べると、すこしフローが違うので最初は戸惑うかもしれません。 DIコンテナ(とその設定)を、メタ的に自動生成するイメージに近いかと思います。 チュートリアルで動きを確認する こちらの公式のチュートリアルを動かしながら動作を確認していきます。 https://github.com/google/wire/blob/master/_tutorial/README.md まずは、手動でDIするコードで動きを理解しておきます。(予習は大事です) main.go を作りその中に以下のコードを書き込みます。 package main impor

    google/wireを使ってGoでDI(dependency injection)してみる | ビジネスとIT活用に役立つ情報(株式会社アーティス)
    cpp_0302
    cpp_0302 2020/10/07
  • GoのおすすめDIツール | Raksul ENGINEERING

    はじめに これまでラクスルではRubyを開発言語として採用することが多かったのですが、最近はコマンドラインツールやバッチ処理などでGoによる開発も増えています。 私が最近取り組んでいる印刷発注基盤の刷新プロジェクトでもGoを使ってWEBアプリケーションを開発しており、社内では先例がないこともあって色々と苦労しながらも楽しく開発を進めています。 GoによるWEBアプリケーション開発では、RubyにおけるRailsのようなデファクトスタンダードは存在しないため考慮すべき点がたくさんあります。 例えば、「パッケージ構成をどうするか」、「WEBアプリケーションフレームワークを使うべきか」などですが今回はちょっと軽めのテーマとしてDIツールについて紹介します。 DIとは DIとはDependency Injectionの略で「依存性の注入」と訳されます。 Goではインタフェース型の値をコンスタラクタ

    GoのおすすめDIツール | Raksul ENGINEERING
    cpp_0302
    cpp_0302 2020/10/07
  • Goのpprofの使い方【基礎編】 - Carpe Diem

    概要 pprofの使い方の備忘録として何回かに分けて書いてきます。 今回は前提知識として知っておくべきことを書きます。 環境 go 1.10.1 pprofは2つの計測方法がある 以下の2つのやり方があります。 runtime/pprof が提供しているAPIを使ってファイルに出力する net/http/pprof を使ってプロファイル取得用の http サーバーを立てる 前者は短時間で実行が終了するようなケースで使います。 後者はWebサーバのようにずっと動かすプログラムのケースで使います。 手順 基的な手順は以下です。 コードにプロファイラを埋め込む プログラムを動かしている間にプロファイルの取得 プロファイルの解析 runtime/pprofの場合 runtime/pprofを使いやすい形にラップしている以下のライブラリを使います。 github.com デフォルトではCPU Pr

    Goのpprofの使い方【基礎編】 - Carpe Diem
  • Unit Testing Golang HTTP Middleware - Kyle Purdon - Medium

    Unit-Testing Golang HTTP Middleware is simple, but a topic that is not well covered. This post covers an example http middleware including unit tests. Constructing and using idiomatic http middleware is a story that’s already been told. See this, this, or simply google it to learn more about the topic. Something you won’t find in that search is how to unit test http middleware in Golang. The examp

    Unit Testing Golang HTTP Middleware - Kyle Purdon - Medium
  • HTTPサーバとcontext.Context

    golang で HTTP サーバを書く際に,どう context.Context を活用したら良いか,今考えていることをまとめておきます はじめにgolang における強力な道具の一つに context.Context interface というのがあります.キャンセルをサブルーチンに伝搬したり,限られたスコープ内で一貫してアクセスできるインメモリ KV ストア的な役目を担っています. サーバにおいても,リクエストがキャンセルされたら handler の内部で行う高コストな計算や外部リソースへのアクセスもキャンセルできるようにしておくのが望ましいはずです.また,リクエストスコープに閉じる値を保持するインメモリ KV ストアとしての役割も context で担えます. そこで,HTTP サーバを書く際にどのようにcontext.Context を活用するのが良いかをまとめたいと思います.

    cpp_0302
    cpp_0302 2018/10/04
  • Go専用対ISUCON兵器 「graqt」を書いた - ps aux | grep serinuntius

    はじめに この記事でも書いたけど、最近ISUCONの面白さに気づいた。 serinuntius.hatenablog.jp 社内ISUCONはRubyで書かれていたけど、家ISUCONでは使用言語が選択できる。 そうなったら、今なら迷わずにGoを選ぶ。 それは、何故かと言うとGoが速いとかそういう理由よりも、GolandというIDEのおかげである。 こいつの補完やらなんやらがとても良くできているので、ソースを読むのも書くのも爆速になるからである。 RubyにもJetbrains製の Rubymine というのがあるけれど、動的言語だからか完全にはコードジャンプできない。 同名のメソッドがあったときには、選択肢が出てユーザにどのメソッドですか?みたいな感じで問いかける感じ。 けど、Golandは型があるからか100%の精度でコードジャンプできる。 そのおかげで、爆速コードリーディングが可能

    Go専用対ISUCON兵器 「graqt」を書いた - ps aux | grep serinuntius
  • gomockでaws-sdk-goをモック/スタブする - sometimes I laugh

    普段、Rubyを書いていると、Goaws-sdkを扱う際にAPIの呼び出しをモック/スタブするのが意外と大変で苦労する。よくGoのテストのプラクティスとして、スタブしたい関数をグローバル変数に入れておいて、テスト時にすり替えるというのがあるが、もうちょっとなんとかならないかと思ったりする。 以前、gomockを使った、いい感じのaws-sdk-goのモック/スタブ方法を見かけて、それ以来、実践しているのだけれど、残念なことにその元記事が消えてしまった(たぶん)。せっかくなので、この方法論をまとめておくことにした。 gomockとは何か これがとてもよくまとまっているので、これを読めばいいと思う。 流石に丸投げはアレなので、簡単に説明すると、interfaceを元にモック用のGoのコードを生成してくれる。aws-sdk-goはこういったテストのために各APIのinterfaceを公開してい

    gomockでaws-sdk-goをモック/スタブする - sometimes I laugh
  • Golangにおけるinterfaceをつかったテスト技法 | SOTA

    最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単に書いておく.まずはinterfaceを使ったテストの基について説明し次に自分が実践している簡単なテクニックをいくつか紹介する. なおGolangのテストの基については @suzuken さんによる「みんなのGo言語」 の6章が最高なので今すぐ買ってくれ! 前提 自分はテストフレームワークや外部ツールは全く使わない.標準のtestingパッケージのみを使う.https://golang.org/doc/faq#Packages_Testing にも書かれているようにテストのためのフレームワークを使うことは新たなMini language(DSL)を導入することと変わらない.最初にそれを書く人は楽になるかもしれないが新しくプロジェクトに参入してきたひ

  • protoeasyでprotobufのコンパイルを簡単にする - Carpe Diem

    概要 gRPCなどで使われているprotobufですが、.protoの定義は簡単でもコンパイルにちょっと学習コストがかかります。 gogoprotoやgrpc-gatewayといった他のライブラリも使うと、中々にカオスなコマンドになります。 grpc-gatewayの例 protoc -I/usr/local/include -I. \ -I$GOPATH/src \ -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --grpc-gateway_out=logtostderr=true:. \ path/to/your_service.proto ref: https://github.com/grpc-ecosystem/grpc-gateway この辺の手間を解決してくれるのが次

    protoeasyでprotobufのコンパイルを簡単にする - Carpe Diem
  • grpc-gatewayでgRPCサーバをRESTで叩けるようにする - Carpe Diem

    概要 gRPCはProtocol Buffersを喋るもの同士ではメリットが大きいですが、RESTしか叩け無いものや、curlでRESTを叩くようにサクッと検証したかったりするときに不便です。 そんな問題を解消してくれるのがgrpc-gatewayで、protobuf定義からREST APIを提供するリバースプロキシを生成してくれます。 github.com 環境 golang 1.9.2 protobuf 3.5.0 grpc 1.7.2 grpc-gateway 1.3.0 成果物 今回のコードはこちらです。 github.com 実装 proto 死活監視用のサービスと、ユーザ情報に関するサービスの2つを用意してみます。 RESTのエンドポイントとしては GET /alive GET /user/{id} GET /user PUT /user/{id} です。 alive.prot

    grpc-gatewayでgRPCサーバをRESTで叩けるようにする - Carpe Diem
  • 物理サーバを選定する際のポイント – Eureka Engineering – Medium

    Eureka EngineeringLearn about Eureka’s engineering efforts, product developments and more.

    物理サーバを選定する際のポイント – Eureka Engineering – Medium