LoginSignup
0
0

More than 3 years have passed since last update.

stringer を読み解く

Posted at

概要

  • 自動生成を試してみたかったので単純な(ことをしているように見える)stringer のソースを見る。
  • ソース

読み解く

1-85

  • 使い方やライセンスのコメント
  • import

86-103

  • flagの設定
  • Usage という便利なものがある

105-170

  • main
106-141
  • 変数の初期化等
  • Generator が処理を担う
142-169

181-最後

parsePackage: 213-249
  • main で出てきた1つ目のGenrator の処理
  • packagesライブラリを使って、Package, File インスタンスを作成する
  • Fileインスタンスは、packages.Package.Syntax 毎に作成 (*ast.Filesの配列)
generate:251-297
slice が一つのとき
  • 558: 定数名を結合した文字列と、各定数の文字列内の開始Index一覧のconst,varを生成
  • 564-568: 生成したconst,varを使って文字列を決定するString()を生成
slice が~10, 11以上のとき
  • 603: ~10のときは、複数のconst, varを生成する
  • 629 : 11以上のときは map を生成し、それを使用するString()を生成する

[format: 332-342]

  • go/format パッケージ使うだけ

所感

  • 解析にはgo/parserが必要でない
  • genDecl部分と、ast.Fileの理解が出来れば簡単に自動生成が使えそう
  • コメントがかなり丁寧に書いてある

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0