タグ

golangに関するcpp_0302のブックマーク (12)

  • Re: Configuring sql.DB for Better Performance : DSAS開発者の部屋

    Configuring sql.DB for Better Performance という記事を知りました。 コネクションプールの大きさを制御する3つの設定を丁寧に解説されたとても良い記事です。 しかし、この記事で推奨されている設定については同意することができません。私が推奨する設定とその理由を解説していきたいと思います。 Limit ConnMaxLifetime instead of MaxIdleConns Allowing just 1 idle connection to be retained and reused makes a massive difference to this particular benchmark — it cuts the average runtime by about 8 times and reduces memory usage by ab

    Re: Configuring sql.DB for Better Performance : DSAS開発者の部屋
  • 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/packagesについて

  • 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でstructの定義を見てあれこれするのに、ast.Fileを直接見るよりtypes.Packageを参照したほうが楽(かもしれない) - podhmo's diary

    goでstructの定義を見てあれこれしたいことがある。特にコード生成などの文脈が多い。このような時に巷の記事や情報などではASTをがんばって解析するという方法が紹介されている事が多い。それよりもtypes.Package経由で*types.Objectを触ったほうが便利だよという話。 types.Objectとは? go/typesの中に記述されているinterface。以下のような定義になっている(長いけれど実質使うのはName,Type,Stringくらい(ASTへ反映したいときなどにはPosも使う))。 go/types/object.go(定義は長いし読み飛ばしても構わない) // TODO(gri) Document factory, accessor methods, and fields. General clean-up. // An Object describes a

    goでstructの定義を見てあれこれするのに、ast.Fileを直接見るよりtypes.Packageを参照したほうが楽(かもしれない) - podhmo's diary
    cpp_0302
    cpp_0302 2021/03/01
    [go/types]
  • GoのコードからPlantUMLコードを生成する静的解析ツールを作っている - 日記マン

    tl;dr go/types パッケージがめちゃくちゃ便利 https://golang.org/pkg/go/types/ https://github.com/golang/example/tree/master/gotypes gouml の紹介 Goのコードを静的解析し、PlantUMLのコードを吐くパーサを開発している。 github.com 例えばGo言語で書かれたこのソースファイルを渡すと、 package main type Human struct { Name string Age Age } type Age int func (a Age) IsAdult() bool { return a >= 20 } 以下のような PlantUML コードが生成される。 package "main" { class "Age" as main.Age <<V,Orchid>>

    GoのコードからPlantUMLコードを生成する静的解析ツールを作っている - 日記マン
    cpp_0302
    cpp_0302 2021/03/01
    [go/types]
  • 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構造体の単位

  • 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
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar

  • 1