前回の記事で、以下のようなことを言っていた。わかりやすさを考えると、「どのクラスのどのメソッドの中のどの箇所か?」という形で表現したい(今回の場合は「WebSocketEndpointのdecode()メソッドのjson.loads()部分」という形)。runは以下の様にして使う。このときxxx.goはソースコードとして扱われてbuild時のpackageに含まれる。ところで、go/astなどのコードを試しているときには、.goのファイルを入力として扱いたいときがある。個人的にコード生成をするときにはprestringというパッケージをベースにして行うことが多い。テンプレートエンジンによるコード生成やASTを直接触る方法との差分は別の機会に書くとして今回追加しようとした機能についてまとめておく。astgoはASTの解析が手軽なのが便利。ところでこれにgo/typesの機能を使うととても便利になる。その威力を一番わかりやすく体験できそうな例を思いついたので紹介する。goでASTを取り出すと、通常はファイル単位で扱うことになる。Commentsフィールドにある。astASTを触る際にコメントの取扱いがだるいと一部で話題ですが。コメントの他にも取扱いが面倒なものがあります。それが改行の情報です。astgoでstructの定義を見てあれこれしたいことがある。コード生成などの文脈が多い。このような時に巷の記事や情報などではASTをがんばって解析するという方法が紹介されている事が多い。pythonのコードをparseするためにastモジュールが用意されていたりする。このモジュールはpythonのコードをparseしてvisitor的なものでastをtravarseしてなどと便利ではあるのだけれど。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。