...

パッケージ ast

import "go/ast"
概要
目次

概要 ▾

ast パッケージは,Go パッケージの構文木を表す型を宣言します。

目次 ▾

func FileExports(src *File) bool
func FilterDecl(decl Decl, f Filter) bool
func FilterFile(src *File, f Filter) bool
func FilterPackage(pkg *Package, f Filter) bool
func Fprint(w io.Writer, fset *token.FileSet, x interface{}, f FieldFilter) error
func Inspect(node Node, f func(Node) bool)
func IsExported(name string) bool
func NotNilFilter(_ string, v reflect.Value) bool
func PackageExports(pkg *Package) bool
func Print(fset *token.FileSet, x interface{}) error
func SortImports(fset *token.FileSet, f *File)
func Walk(v Visitor, node Node)
type ArrayType
    func (x *ArrayType) End() token.Pos
    func (x *ArrayType) Pos() token.Pos
type AssignStmt
    func (s *AssignStmt) End() token.Pos
    func (s *AssignStmt) Pos() token.Pos
type BadDecl
    func (d *BadDecl) End() token.Pos
    func (d *BadDecl) Pos() token.Pos
type BadExpr
    func (x *BadExpr) End() token.Pos
    func (x *BadExpr) Pos() token.Pos
type BadStmt
    func (s *BadStmt) End() token.Pos
    func (s *BadStmt) Pos() token.Pos
type BasicLit
    func (x *BasicLit) End() token.Pos
    func (x *BasicLit) Pos() token.Pos
type BinaryExpr
    func (x *BinaryExpr) End() token.Pos
    func (x *BinaryExpr) Pos() token.Pos
type BlockStmt
    func (s *BlockStmt) End() token.Pos
    func (s *BlockStmt) Pos() token.Pos
type BranchStmt
    func (s *BranchStmt) End() token.Pos
    func (s *BranchStmt) Pos() token.Pos
type CallExpr
    func (x *CallExpr) End() token.Pos
    func (x *CallExpr) Pos() token.Pos
type CaseClause
    func (s *CaseClause) End() token.Pos
    func (s *CaseClause) Pos() token.Pos
type ChanDir
type ChanType
    func (x *ChanType) End() token.Pos
    func (x *ChanType) Pos() token.Pos
type CommClause
    func (s *CommClause) End() token.Pos
    func (s *CommClause) Pos() token.Pos
type Comment
    func (c *Comment) End() token.Pos
    func (c *Comment) Pos() token.Pos
type CommentGroup
    func (g *CommentGroup) End() token.Pos
    func (g *CommentGroup) Pos() token.Pos
    func (g *CommentGroup) Text() string
type CommentMap
    func NewCommentMap(fset *token.FileSet, node Node, comments []*CommentGroup) CommentMap
    func (cmap CommentMap) Comments() []*CommentGroup
    func (cmap CommentMap) Filter(node Node) CommentMap
    func (cmap CommentMap) String() string
    func (cmap CommentMap) Update(old, new Node) Node
type CompositeLit
    func (x *CompositeLit) End() token.Pos
    func (x *CompositeLit) Pos() token.Pos
type Decl
type DeclStmt
    func (s *DeclStmt) End() token.Pos
    func (s *DeclStmt) Pos() token.Pos
type DeferStmt
    func (s *DeferStmt) End() token.Pos
    func (s *DeferStmt) Pos() token.Pos
type Ellipsis
    func (x *Ellipsis) End() token.Pos
    func (x *Ellipsis) Pos() token.Pos
type EmptyStmt
    func (s *EmptyStmt) End() token.Pos
    func (s *EmptyStmt) Pos() token.Pos
type Expr
type ExprStmt
    func (s *ExprStmt) End() token.Pos
    func (s *ExprStmt) Pos() token.Pos
type Field
    func (f *Field) End() token.Pos
    func (f *Field) Pos() token.Pos
type FieldFilter
type FieldList
    func (f *FieldList) End() token.Pos
    func (f *FieldList) NumFields() int
    func (f *FieldList) Pos() token.Pos
type File
    func MergePackageFiles(pkg *Package, mode MergeMode) *File
    func (f *File) End() token.Pos
    func (f *File) Pos() token.Pos
type Filter
type ForStmt
    func (s *ForStmt) End() token.Pos
    func (s *ForStmt) Pos() token.Pos
type FuncDecl
    func (d *FuncDecl) End() token.Pos
    func (d *FuncDecl) Pos() token.Pos
type FuncLit
    func (x *FuncLit) End() token.Pos
    func (x *FuncLit) Pos() token.Pos
type FuncType
    func (x *FuncType) End() token.Pos
    func (x *FuncType) Pos() token.Pos
type GenDecl
    func (d *GenDecl) End() token.Pos
    func (d *GenDecl) Pos() token.Pos
type GoStmt
    func (s *GoStmt) End() token.Pos
    func (s *GoStmt) Pos() token.Pos
type Ident
    func NewIdent(name string) *Ident
    func (x *Ident) End() token.Pos
    func (id *Ident) IsExported() bool
    func (x *Ident) Pos() token.Pos
    func (id *Ident) String() string
type IfStmt
    func (s *IfStmt) End() token.Pos
    func (s *IfStmt) Pos() token.Pos
type ImportSpec
    func (s *ImportSpec) End() token.Pos
    func (s *ImportSpec) Pos() token.Pos
type Importer
type IncDecStmt
    func (s *IncDecStmt) End() token.Pos
    func (s *IncDecStmt) Pos() token.Pos
type IndexExpr
    func (x *IndexExpr) End() token.Pos
    func (x *IndexExpr) Pos() token.Pos
type InterfaceType
    func (x *InterfaceType) End() token.Pos
    func (x *InterfaceType) Pos() token.Pos
type KeyValueExpr
    func (x *KeyValueExpr) End() token.Pos
    func (x *KeyValueExpr) Pos() token.Pos
type LabeledStmt
    func (s *LabeledStmt) End() token.Pos
    func (s *LabeledStmt) Pos() token.Pos
type MapType
    func (x *MapType) End() token.Pos
    func (x *MapType) Pos() token.Pos
type MergeMode
type Node
type ObjKind
    func (kind ObjKind) String() string
type Object
    func NewObj(kind ObjKind, name string) *Object
    func (obj *Object) Pos() token.Pos
type Package
    func NewPackage(fset *token.FileSet, files map[string]*File, importer Importer, universe *Scope) (*Package, error)
    func (p *Package) End() token.Pos
    func (p *Package) Pos() token.Pos
type ParenExpr
    func (x *ParenExpr) End() token.Pos
    func (x *ParenExpr) Pos() token.Pos
type RangeStmt
    func (s *RangeStmt) End() token.Pos
    func (s *RangeStmt) Pos() token.Pos
type ReturnStmt
    func (s *ReturnStmt) End() token.Pos
    func (s *ReturnStmt) Pos() token.Pos
type Scope
    func NewScope(outer *Scope) *Scope
    func (s *Scope) Insert(obj *Object) (alt *Object)
    func (s *Scope) Lookup(name string) *Object
    func (s *Scope) String() string
type SelectStmt
    func (s *SelectStmt) End() token.Pos
    func (s *SelectStmt) Pos() token.Pos
type SelectorExpr
    func (x *SelectorExpr) End() token.Pos
    func (x *SelectorExpr) Pos() token.Pos
type SendStmt
    func (s *SendStmt) End() token.Pos
    func (s *SendStmt) Pos() token.Pos
type SliceExpr
    func (x *SliceExpr) End() token.Pos
    func (x *SliceExpr) Pos() token.Pos
type Spec
type StarExpr
    func (x *StarExpr) End() token.Pos
    func (x *StarExpr) Pos() token.Pos
type Stmt
type StructType
    func (x *StructType) End() token.Pos
    func (x *StructType) Pos() token.Pos
type SwitchStmt
    func (s *SwitchStmt) End() token.Pos
    func (s *SwitchStmt) Pos() token.Pos
type TypeAssertExpr
    func (x *TypeAssertExpr) End() token.Pos
    func (x *TypeAssertExpr) Pos() token.Pos
type TypeSpec
    func (s *TypeSpec) End() token.Pos
    func (s *TypeSpec) Pos() token.Pos
type TypeSwitchStmt
    func (s *TypeSwitchStmt) End() token.Pos
    func (s *TypeSwitchStmt) Pos() token.Pos
type UnaryExpr
    func (x *UnaryExpr) End() token.Pos
    func (x *UnaryExpr) Pos() token.Pos
type ValueSpec
    func (s *ValueSpec) End() token.Pos
    func (s *ValueSpec) Pos() token.Pos
type Visitor

CommentMap
Inspect
Print

パッケージファイル

ast.go commentmap.go filter.go import.go print.go resolve.go scope.go walk.go

func FileExports

func FileExports(src *File) bool

FileExports は,エクスポートされたノードだけが残るように, Go ソースファイルの AST を整えます。 エクスポートされなかったすべての最上位識別子と,それらに関連付けられた情報 (型,初期値,関数本体など) は削除されます。 エクスポートされていないフィールドとエクスポートされた型のメソッドは削除されます。 File.Comments リストは変更されません。

FileExports は,エクスポートされた宣言があるかどうかを報告します。

func FilterDecl

func FilterDecl(decl Decl, f Filter) bool

FilterDecl は,フィルタ f を通過しないすべての名前 (structfield および interface メソッドの名前は含みますが,パラメータリストからは除く) を削除することによって, Go 宣言の AST を整えます。

FilterDecl は,フィルタリング後に宣言された名前が残っているかどうかを報告します。

func FilterFile

func FilterFile(src *File, f Filter) bool

FilterFile は,フィルタ f を通過しない最上位の宣言 (structfield および interface メソッドの名前は含みますが,パラメータリストは含まない) からすべての名前を削除して, Go ファイルの AST を整えます。 宣言が後で空の場合,その宣言は AST から削除されます。 インポート宣言は常に削除されます。 File.Comments リストは変更されません。

FilterFile は,フィルタリング後に最上位の宣言が残っているかどうかを報告します。

func FilterPackage

func FilterPackage(pkg *Package, f Filter) bool

FilterPackage は,フィルタ f を通過しないトップレベルの宣言 (structfield と interface method の名前は含みますが,パラメータリストは含まない) からすべての名前を削除することによって, Go パッケージの AST を整えます。 宣言が後で空の場合,その宣言は AST から削除されます。 pkg.Files リストは変更されていないので,ファイル名とトップレベルのパッケージコメントは失われません。

FilterPackage は,フィルタリング後に最上位の宣言が残っているかどうかを報告します。

func Fprint

func Fprint(w io.Writer, fset *token.FileSet, x interface{}, f FieldFilter) error

Fprint は, AST ノード x から始まる (サブ) ツリーを w に出力します。 fset != nil の場合,位置情報はそのファイルセットを基準にして解釈されます。 それ以外の場合,位置は整数値 (ファイルセット固有のオフセット) として表示されます。

出力を制御するために, nil 以外の FieldFilter f を指定することができます。 f(fieldname, fieldvalue) が真である struct フィールドが表示されます。 他のすべてのものは出力からフィルタリングされます。 未エクスポートの構造体フィールドは表示されません。

func Inspect

func Inspect(node Node, f func(Node) bool)

Inspect は AST を深さ優先の順序で走査します。 それは f(node) を呼び出すことから始まります。 node を nil にしないでください。 f が true を返す場合, Inspect は node の nil 以外の子のそれぞれに対して再帰的に f を呼び出し,その後に f(nil) を呼び出します。

この例では, Go プログラムの AST を調べる方法を説明します。

コード:

// src は AST を調べたい入力です。
src := `
package p
const c = 1.0
var X = f(3.14)*2 + c
`

// src を解析して AST を作成します。
fset := token.NewFileSet() // 位置は fset に対する相対位置です
f, err := parser.ParseFile(fset, "src.go", src, 0)
if err != nil {
    panic(err)
}

// AST を調べて,すべての ID とリテラルを表示します。
ast.Inspect(f, func(n ast.Node) bool {
    var s string
    switch x := n.(type) {
    case *ast.BasicLit:
        s = x.Value
    case *ast.Ident:
        s = x.Name
    }
    if s != "" {
        fmt.Printf("%s:\t%s\n", fset.Position(n.Pos()), s)
    }
    return true
})

出力:

src.go:2:9:	p
src.go:3:7:	c
src.go:3:11:	1.0
src.go:4:5:	X
src.go:4:9:	f
src.go:4:11:	3.14
src.go:4:17:	2
src.go:4:21:	c

func IsExported

func IsExported(name string) bool

IsExported は, name が大文字で始まるかどうかを報告します。

func NotNilFilter

func NotNilFilter(_ string, v reflect.Value) bool

NotNilFilter は,ゼロではないフィールド値に対して true を返します。 それ以外の場合は false を返します。

func PackageExports

func PackageExports(pkg *Package) bool

PackageExports は,エクスポートされたノードだけが残るように Go パッケージの AST を整えます。 pkg.Files リストは変更されていないので,ファイル名とトップレベルのパッケージコメントは失われません。

PackageExports は,エクスポートされた宣言があるかどうかを報告します。 それ以外の場合は false を返します。

func Print

func Print(fset *token.FileSet, x interface{}) error

Print は x を標準出力に出力し, nil フィールドをスキップします。 Print(fset, x) は Fprint(os.Stdout, fset, x, NotNilFilter) と同じです。

この例は,AST をデバッグ用に表示するとどうなるかを示します。

コード:

// src は AST を表示したい入力です。
src := `
package main
func main() {
    println("Hello, World!")
}
`

// src を解析して AST を作成します。
fset := token.NewFileSet() // 位置は fset に対する相対位置です
f, err := parser.ParseFile(fset, "", src, 0)
if err != nil {
    panic(err)
}

// AST を表示します。
ast.Print(fset, f)

出力:

     0  *ast.File {
     1  .  Package: 2:1
     2  .  Name: *ast.Ident {
     3  .  .  NamePos: 2:9
     4  .  .  Name: "main"
     5  .  }
     6  .  Decls: []ast.Decl (len = 1) {
     7  .  .  0: *ast.FuncDecl {
     8  .  .  .  Name: *ast.Ident {
     9  .  .  .  .  NamePos: 3:6
    10  .  .  .  .  Name: "main"
    11  .  .  .  .  Obj: *ast.Object {
    12  .  .  .  .  .  Kind: func
    13  .  .  .  .  .  Name: "main"
    14  .  .  .  .  .  Decl: *(obj @ 7)
    15  .  .  .  .  }
    16  .  .  .  }
    17  .  .  .  Type: *ast.FuncType {
    18  .  .  .  .  Func: 3:1
    19  .  .  .  .  Params: *ast.FieldList {
    20  .  .  .  .  .  Opening: 3:10
    21  .  .  .  .  .  Closing: 3:11
    22  .  .  .  .  }
    23  .  .  .  }
    24  .  .  .  Body: *ast.BlockStmt {
    25  .  .  .  .  Lbrace: 3:13
    26  .  .  .  .  List: []ast.Stmt (len = 1) {
    27  .  .  .  .  .  0: *ast.ExprStmt {
    28  .  .  .  .  .  .  X: *ast.CallExpr {
    29  .  .  .  .  .  .  .  Fun: *ast.Ident {
    30  .  .  .  .  .  .  .  .  NamePos: 4:2
    31  .  .  .  .  .  .  .  .  Name: "println"
    32  .  .  .  .  .  .  .  }
    33  .  .  .  .  .  .  .  Lparen: 4:9
    34  .  .  .  .  .  .  .  Args: []ast.Expr (len = 1) {
    35  .  .  .  .  .  .  .  .  0: *ast.BasicLit {
    36  .  .  .  .  .  .  .  .  .  ValuePos: 4:10
    37  .  .  .  .  .  .  .  .  .  Kind: STRING
    38  .  .  .  .  .  .  .  .  .  Value: "\"Hello, World!\""
    39  .  .  .  .  .  .  .  .  }
    40  .  .  .  .  .  .  .  }
    41  .  .  .  .  .  .  .  Ellipsis: -
    42  .  .  .  .  .  .  .  Rparen: 4:25
    43  .  .  .  .  .  .  }
    44  .  .  .  .  .  }
    45  .  .  .  .  }
    46  .  .  .  .  Rbrace: 5:1
    47  .  .  .  }
    48  .  .  }
    49  .  }
    50  .  Scope: *ast.Scope {
    51  .  .  Objects: map[string]*ast.Object (len = 1) {
    52  .  .  .  "main": *(obj @ 11)
    53  .  .  }
    54  .  }
    55  .  Unresolved: []*ast.Ident (len = 1) {
    56  .  .  0: *(obj @ 29)
    57  .  }
    58  }

func SortImports

func SortImports(fset *token.FileSet, f *File)

SortImports は, f のインポートブロック内の連続するインポート行のランをソートします。 データを損失することなく複製できる場合は,重複したインポートも削除されます。

func Walk

func Walk(v Visitor, node Node)

Walk は AST を深さ優先の順序で走査します。 それは v.Visit(node) を呼び出すことで始まります。 node を nil にしないでください。 v.Visit(node) によって返されたVisitor w が nil ではない場合, node の nil 以外の子のそれぞれについて,Visitor w を使って Walk が再帰的に呼び出され,その後に w.Visit(nil) が呼び出されます。

type ArrayType

ArrayType ノードは,配列またはスライスの種類を表します。

type ArrayType struct {
    Lbrack token.Pos // "[" の位置
    Len    Expr      // [...]T 配列型の場合は省略記号ノード,スライス型の場合は nil
    Elt    Expr      // 要素型
}

func (*ArrayType) End

func (x *ArrayType) End() token.Pos

func (*ArrayType) Pos

func (x *ArrayType) Pos() token.Pos

type AssignStmt

AssignStmt ノードは,代入または短い変数の宣言を表します。

type AssignStmt struct {
    Lhs    []Expr
    TokPos token.Pos   // Tok の位置
    Tok    token.Token // 割り当てトークン, DEFINE
    Rhs    []Expr
}

func (*AssignStmt) End

func (s *AssignStmt) End() token.Pos

func (*AssignStmt) Pos

func (s *AssignStmt) Pos() token.Pos

type BadDecl

BadDecl ノードは,正しい宣言ノードを作成できない構文エラーを含む宣言のプレースホルダーです。

type BadDecl struct {
    From, To token.Pos // 不適切な宣言の位置範囲
}

func (*BadDecl) End

func (d *BadDecl) End() token.Pos

func (*BadDecl) Pos

func (d *BadDecl) Pos() token.Pos

type BadExpr

BadExpr ノードは,正しい式ノードを作成できない構文エラーを含む式のプレースホルダです。

type BadExpr struct {
    From, To token.Pos // 不良表現の位置範囲
}

func (*BadExpr) End

func (x *BadExpr) End() token.Pos

func (*BadExpr) Pos

func (x *BadExpr) Pos() token.Pos

type BadStmt

BadStmt ノードは,正しいステートメントノードを作成できない構文エラーを含むステートメントのプレースホルダーです。

type BadStmt struct {
    From, To token.Pos // 不良ステートメントの位置範囲
}

func (*BadStmt) End

func (s *BadStmt) End() token.Pos

func (*BadStmt) Pos

func (s *BadStmt) Pos() token.Pos

type BasicLit

BasicLit ノードは基本型のリテラルを表します。

type BasicLit struct {
    ValuePos token.Pos   // 文字位置
    Kind     token.Token // token.INT, token.FLOAT, token.IMAG, token.CHAR, または token.STRING
    Value    string      // リテラル文字列。 例えば 42, 0x7f, 3.14, 1e-9, 2.4i, 'a', '\x7f', "foo" ,または `\m\n\o`
}

func (*BasicLit) End

func (x *BasicLit) End() token.Pos

func (*BasicLit) Pos

func (x *BasicLit) Pos() token.Pos

type BinaryExpr

BinaryExpr ノードはバイナリ式を表します。

type BinaryExpr struct {
    X     Expr        // 左オペランド
    OpPos token.Pos   // Op の位置
    Op    token.Token // オペレーター
    Y     Expr        // 右オペランド
}

func (*BinaryExpr) End

func (x *BinaryExpr) End() token.Pos

func (*BinaryExpr) Pos

func (x *BinaryExpr) Pos() token.Pos

type BlockStmt

BlockStmt ノードは,ブレースステートメントリストを表します。

type BlockStmt struct {
    Lbrace token.Pos // "{" の位置
    List   []Stmt
    Rbrace token.Pos // "}" の位置
}

func (*BlockStmt) End

func (s *BlockStmt) End() token.Pos

func (*BlockStmt) Pos

func (s *BlockStmt) Pos() token.Pos

type BranchStmt

BranchStmt ノードは, break, continue, goto ,または fallthrough ステートメントを表します。

type BranchStmt struct {
    TokPos token.Pos   // Tok の位置
    Tok    token.Token // キーワードトークン (BREAK, CONTINUE, GOTO, FALLTHROUGH)
    Label  *Ident      // ラベル名; または nil
}

func (*BranchStmt) End

func (s *BranchStmt) End() token.Pos

func (*BranchStmt) Pos

func (s *BranchStmt) Pos() token.Pos

type CallExpr

CallExpr ノードは,引数リストが後に続く式を表します。

type CallExpr struct {
    Fun      Expr      // 関数式
    Lparen   token.Pos // "(" の位置
    Args     []Expr    // 関数の引数; または nil
    Ellipsis token.Pos // "..." の位置 ("..." がない場合は token.NoPos)
    Rparen   token.Pos // ")" の位置
}

func (*CallExpr) End

func (x *CallExpr) End() token.Pos

func (*CallExpr) Pos

func (x *CallExpr) Pos() token.Pos

type CaseClause

CaseClause は,式または型切り替えステートメントのケースを表します。

type CaseClause struct {
    Case  token.Pos // "case" または "default" キーワードの位置
    List  []Expr    // 式または型のリスト nil はデフォルトケースを意味します
    Colon token.Pos // ":" の位置
    Body  []Stmt    // ステートメントリスト; または nil
}

func (*CaseClause) End

func (s *CaseClause) End() token.Pos

func (*CaseClause) Pos

func (s *CaseClause) Pos() token.Pos

type ChanDir

チャンネル型の方向は,次の定数の一方または両方を含むビットマスクによって示されます。

type ChanDir int
const (
    SEND ChanDir = 1 << iota
    RECV
)

type ChanType

ChanType ノードはチャンネル型を表します。

type ChanType struct {
    Begin token.Pos // "chan" キーワードまたは "<-" (どちらか先に来た方) の位置
    Arrow token.Pos // "<-" の位置 ("<-" がない場合は token.NoPos); added in Go 1.1
    Dir   ChanDir   // チャンネル方向
    Value Expr      // 値型
}

func (*ChanType) End

func (x *ChanType) End() token.Pos

func (*ChanType) Pos

func (x *ChanType) Pos() token.Pos

type CommClause

CommClause ノードは, select ステートメントのケースを表します。

type CommClause struct {
    Case  token.Pos // "case" または "default" キーワードの位置
    Comm  Stmt      // 文を送信または受信します。 nil はデフォルトケースを意味します
    Colon token.Pos // ":" の位置
    Body  []Stmt    // ステートメントリスト; または nil
}

func (*CommClause) End

func (s *CommClause) End() token.Pos

func (*CommClause) Pos

func (s *CommClause) Pos() token.Pos

type Comment

コメントノードは, 1 つの // スタイルまたは /* スタイルのコメントを表します。

type Comment struct {
    Slash token.Pos // コメントを開始する "/" の位置
    Text  string    // コメントテキスト (// スタイルのコメントの場合は '\n' を除く)
}

func (*Comment) End

func (c *Comment) End() token.Pos

func (*Comment) Pos

func (c *Comment) Pos() token.Pos

type CommentGroup

CommentGroup は,他のトークンがなく,間に空行がない,一連のコメントを表します。

type CommentGroup struct {
    List []*Comment // len(List) > 0
}

func (*CommentGroup) End

func (g *CommentGroup) End() token.Pos

func (*CommentGroup) Pos

func (g *CommentGroup) Pos() token.Pos

func (*CommentGroup) Text

func (g *CommentGroup) Text() string

テキストはコメントのテキストを返します。 コメントマーカー (//, /* ,および */) ,行コメントの最初のスペース,および先頭と末尾の空白行は削除されます。 複数の空行は 1 つに減らされ,行の末尾のスペースは切り捨てられます。 結果が空でなければ,それは改行で終了します。

type CommentMap 1.1

CommentMap は AST ノードをそれに関連するコメントグループのリストにマップします。 関連の説明については, NewCommentMap を参照してください。

type CommentMap map[Node][]*CommentGroup

この例では, ast.CommentMap を使用して正しいコメントの関連付けを維持しながら, Go プログラムの変数宣言を削除する方法を説明します。

コード:

// src は,これから操作する AST を作成するための入力です。
src := `
// これはパッケージのコメントです。
package main

// このコメントは, hello 定数に関連付けられています。
const hello = "Hello, World!" // 行コメント 1

// このコメントは, foo 変数に関連付けられています。
var foo = hello // line comment 2

// このコメントは main 関数に関連付けられています。
func main() {
    fmt.Println(hello) // 行コメント 3
}
`

// src を解析して AST を作成します。
fset := token.NewFileSet() // 位置は fset に対する相対位置です
f, err := parser.ParseFile(fset, "src.go", src, parser.ParseComments)
if err != nil {
    panic(err)
}

// ast.File のコメントから ast.CommentMap を作成します。
// これは,コメントと AST ノード間の関連付けを維持するのに役立ちます。
cmap := ast.NewCommentMap(fset, f, f.Comments)

// 宣言リストから最初の変数宣言を削除します。
for i, decl := range f.Decls {
    if gen, ok := decl.(*ast.GenDecl); ok && gen.Tok == token.VAR {
        copy(f.Decls[i:], f.Decls[i+1:])
        f.Decls = f.Decls[:len(f.Decls)-1]
        break
    }
}

// コメントマップを使用して,もう属さないコメント (変数宣言に関連付けられているコメント) をフィルタリングし,新しいコメントリストを作成します。
f.Comments = cmap.Filter(f).Comments()

// 修正した AST を表示します。
var buf bytes.Buffer
if err := format.Node(&buf, fset, f); err != nil {
    panic(err)
}
fmt.Printf("%s", buf.Bytes())

出力:

// これはパッケージのコメントです。
package main

// このコメントは, hello 定数に関連付けられています。
const hello = "Hello, World!" // 行コメント 1

// このコメントは main 関数に関連付けられています。
func main() {
	fmt.Println(hello) // 行コメント 3
}

func NewCommentMap 1.1

func NewCommentMap(fset *token.FileSet, node Node, comments []*CommentGroup) CommentMap

NewCommentMap は,コメントリストのコメントグループを, node で指定された AST のノードに関連付けることによって,新しいコメントマップを作成します。

次の場合,コメントグループ g はノード n に関連付けられます。

- g は, n の終わりと同じ行から始まる。
- g は, n の直後の行から始まり,次のノードの前に少なくとも 1 つの空行がある。
- g は,n の前に始まり,上の規則で n より前のノードに関連づけられていない

NewCommentMap は,コメントグループを可能な限り最大のノードに関連付けようとします。 たとえば,コメントが代入の末尾にある行コメントである場合,そのコメントは代入の最後のオペランドではなく代入全体に関連付けられます。

func (CommentMap) Comments 1.1

func (cmap CommentMap) Comments() []*CommentGroup

コメントは,コメントマップ内のコメントグループのリストを返します。 結果はソース順にソートされます。

func (CommentMap) Filter 1.1

func (cmap CommentMap) Filter(node Node) CommentMap

filter は, node で指定された AST に対応するノードが存在する cmap のエントリだけで構成される新しいコメントマップを返します。

func (CommentMap) String 1.1

func (cmap CommentMap) String() string

func (CommentMap) Update 1.1

func (cmap CommentMap) Update(old, new Node) Node

Update は,コメントマップ内の古いノードを新しいノードに置き換えて新しいノードを返します。 古いノードに関連付けられていたコメントは,新しいノードに関連付けられています。

type CompositeLit

CompositeLit ノードは複合リテラルを表します。

type CompositeLit struct {
    Type       Expr      // リテラル型; または nil
    Lbrace     token.Pos // "{" の位置
    Elts       []Expr    // 複合要素のリスト; または nil
    Rbrace     token.Pos // "}" の位置
    Incomplete bool      // (ソース) 式が Elts リストにない場合は true; added in Go 1.11
}

func (*CompositeLit) End

func (x *CompositeLit) End() token.Pos

func (*CompositeLit) Pos

func (x *CompositeLit) Pos() token.Pos

type Decl

すべての宣言ノードは Decl インターフェースを実装します。

type Decl interface {
    Node
    // contains filtered or unexported methods
}

type DeclStmt

DeclStmt ノードは,ステートメントリスト内の宣言を表します。

type DeclStmt struct {
    Decl Decl // *CONST , TYPE ,または VAR トークンを含む GenDecl
}

func (*DeclStmt) End

func (s *DeclStmt) End() token.Pos

func (*DeclStmt) Pos

func (s *DeclStmt) Pos() token.Pos

type DeferStmt

DeferStmt ノードは,遅延ステートメントを表します。

type DeferStmt struct {
    Defer token.Pos // "defer" キーワードの位置
    Call  *CallExpr
}

func (*DeferStmt) End

func (s *DeferStmt) End() token.Pos

func (*DeferStmt) Pos

func (s *DeferStmt) Pos() token.Pos

type Ellipsis

省略符号ノードは,パラメータリストの "..." 型,または配列型の "..." 長を表します。

type Ellipsis struct {
    Ellipsis token.Pos // "..." の位置
    Elt      Expr      // 省略要素型 (パラメータリストのみ); または nil
}

func (*Ellipsis) End

func (x *Ellipsis) End() token.Pos

func (*Ellipsis) Pos

func (x *Ellipsis) Pos() token.Pos

type EmptyStmt

EmptyStmt ノードは空のステートメントを表します。 空のステートメントの " 位置 " は,直後に続く (明示的または暗黙的な) セミコロンの位置です。

type EmptyStmt struct {
    Semicolon token.Pos // 次の ";" の位置
    Implicit  bool      // 設定されている場合, ";" ソースで省略された; added in Go 1.5
}

func (*EmptyStmt) End

func (s *EmptyStmt) End() token.Pos

func (*EmptyStmt) Pos

func (s *EmptyStmt) Pos() token.Pos

type Expr

すべての式ノードは Expr インターフェースを実装します。

type Expr interface {
    Node
    // contains filtered or unexported methods
}

type ExprStmt

ExprStmt ノードは,ステートメントリスト内の (独立型) 式を表します。

type ExprStmt struct {
    X Expr // 表現
}

func (*ExprStmt) End

func (s *ExprStmt) End() token.Pos

func (*ExprStmt) Pos

func (s *ExprStmt) Pos() token.Pos

type Field

Field は,構造体型の Field 宣言リスト,インターフェース型のメソッドリスト,またはシグネチャのパラメータ / 結果宣言を表します。 Field.Names は,名前なしパラメータ (型のみを含むパラメータリスト) および埋め込み構造体フィールドの場合は nil です。 後者の場合,フィールド名は型名です。

type Field struct {
    Doc     *CommentGroup // 関連ドキュメント; または nil
    Names   []*Ident      // フィールド / メソッド / パラメータ名; または nil
    Type    Expr          // フィールド / メソッド / パラメータ型
    Tag     *BasicLit     // フィールドタグ; または nil
    Comment *CommentGroup // 行コメント; または nil
}

func (*Field) End

func (f *Field) End() token.Pos

func (*Field) Pos

func (f *Field) Pos() token.Pos

type FieldFilter

FieldFilter は,出力を制御するために Fprint に提供できます。

type FieldFilter func(name string, value reflect.Value) bool

type FieldList

FieldList は,括弧または中括弧で囲まれたフィールドのリストを表します。

type FieldList struct {
    Opening token.Pos // 開きかっこ / 中括弧がある場合はその位置
    List    []*Field  // フィールドリスト; または nil
    Closing token.Pos // 閉じ括弧 / 中括弧がある場合はその位置
}

func (*FieldList) End

func (f *FieldList) End() token.Pos

func (*FieldList) NumFields

func (f *FieldList) NumFields() int

NumFields は, FieldList によって表されるパラメータまたは構造体フィールドの数を返します。

func (*FieldList) Pos

func (f *FieldList) Pos() token.Pos

type File

File ノードは Go ソースファイルを表します。

[コメント] リストには, [ドキュメント] フィールドと [コメント] フィールドを介して他のノードからポイントされているコメントを含め,ソースファイル内のすべてのコメントが表示順に含まれています。

コメントを含むソースコードを正しく表示するには (パッケージ go/format および go/printer を使用) ,ファイルの構文ツリーが変更されたときにコメントを更新するように特別な注意が必要です。 表示の場合,コメントは位置に基づいてトークン間に散在します。 構文ツリーノードを削除または移動する場合は,その近くにある関連コメントも (File.Comments リストから) 削除するか,それに応じて (位置を更新することによって) 移動する必要があります。 CommentMap はこれらの操作のいくつかを容易にするために使われるかもしれません。

コメントがノードに関連付けられているかどうか,およびその方法は操作プログラムによる構文ツリーの解釈によって異なります。 ノードに直接関連付けられている Doc および Comment コメントを除いて,残りのコメントは " 自由浮動 " です (issue #18593, #20744 も参照)

type File struct {
    Doc        *CommentGroup   // 関連ドキュメント; または nil
    Package    token.Pos       // "package" キーワードの位置
    Name       *Ident          // パッケージ名
    Decls      []Decl          // トップレベルの宣言; または nil
    Scope      *Scope          // パッケージスコープ (このファイルのみ)
    Imports    []*ImportSpec   // このファイルにインポートする
    Unresolved []*Ident        // このファイルの未解決の識別子
    Comments   []*CommentGroup // ソースファイル内のすべてのコメントのリスト
}

func MergePackageFiles

func MergePackageFiles(pkg *Package, mode MergeMode) *File

MergePackageFiles は,パッケージに属するファイルの AST をマージしてファイル AST を作成します。 モードフラグはマージ動作を制御します。

func (*File) End

func (f *File) End() token.Pos

func (*File) Pos

func (f *File) Pos() token.Pos

type Filter

type Filter func(string) bool

type ForStmt

ForStmt は for ステートメントを表します。

type ForStmt struct {
    For  token.Pos // for キーワードの位置
    Init Stmt      // 初期設定ステートメント; または nil
    Cond Expr      // 条件式; または nil
    Post Stmt      // 反復ステートメントのポスト; または nil
    Body *BlockStmt
}

func (*ForStmt) End

func (s *ForStmt) End() token.Pos

func (*ForStmt) Pos

func (s *ForStmt) Pos() token.Pos

type FuncDecl

FuncDecl ノードは関数宣言を表します。

type FuncDecl struct {
    Doc  *CommentGroup // 関連ドキュメント; または nil
    Recv *FieldList    // レシーバ (メソッド); または nil (関数)
    Name *Ident        // 関数 / メソッド名
    Type *FuncType     // 関数シグネチャ: "func" キーワードのパラメータ,結果,および位置
    Body *BlockStmt    // 関数本体; 外部 (非 Go) 関数の場合は nil
}

func (*FuncDecl) End

func (d *FuncDecl) End() token.Pos

func (*FuncDecl) Pos

func (d *FuncDecl) Pos() token.Pos

type FuncLit

FuncLit ノードは関数リテラルを表します。

type FuncLit struct {
    Type *FuncType  // 関数型
    Body *BlockStmt // 関数本体
}

func (*FuncLit) End

func (x *FuncLit) End() token.Pos

func (*FuncLit) Pos

func (x *FuncLit) Pos() token.Pos

type FuncType

FuncType ノードは関数型を表します。

type FuncType struct {
    Func    token.Pos  // "func" キーワードの位置 ("func" がない場合は token.NoPos)
    Params  *FieldList // (入力) パラメータ; 非 nil
    Results *FieldList // (出力) 結果; または nil
}

func (*FuncType) End

func (x *FuncType) End() token.Pos

func (*FuncType) Pos

func (x *FuncType) Pos() token.Pos

type GenDecl

GenDecl ノード (総称宣言ノード) は,インポート宣言,定数宣言,型宣言,または変数宣言を表します。 有効な Lparen 位置 (Lparen.IsValid()) は,括弧で囲まれた宣言を示します。

Tok 値と Specs 要素型の関係

token.IMPORT  *ImportSpec
token.CONST   *ValueSpec
token.TYPE    *TypeSpec
token.VAR     *ValueSpec
type GenDecl struct {
    Doc    *CommentGroup // 関連ドキュメント; または nil
    TokPos token.Pos     // Tok の位置
    Tok    token.Token   // IMPORT, CONST, TYPE, VAR
    Lparen token.Pos     // もしあれば, '(' の位置
    Specs  []Spec
    Rparen token.Pos // もしあれば, ')' の位置
}

func (*GenDecl) End

func (d *GenDecl) End() token.Pos

func (*GenDecl) Pos

func (d *GenDecl) Pos() token.Pos

type GoStmt

GoStmt ノードは go ステートメントを表します。

type GoStmt struct {
    Go   token.Pos // "go" キーワードの位置
    Call *CallExpr
}

func (*GoStmt) End

func (s *GoStmt) End() token.Pos

func (*GoStmt) Pos

func (s *GoStmt) Pos() token.Pos

type Ident

Ident ノードは識別子を表します。

type Ident struct {
    NamePos token.Pos // 識別子の位置
    Name    string    // 識別子名
    Obj     *Object   // 表示されたオブジェクト; または nil
}

func NewIdent

func NewIdent(name string) *Ident

NewIdent は位置のない新しい Ident を作成します。 Go パーサー以外のコードによって生成された AST に役立ちます。

func (*Ident) End

func (x *Ident) End() token.Pos

func (*Ident) IsExported

func (id *Ident) IsExported() bool

IsExported は, id が大文字で始まるかどうかを報告します。

func (*Ident) Pos

func (x *Ident) Pos() token.Pos

func (*Ident) String

func (id *Ident) String() string

type IfStmt

IfStmt ノードは if ステートメントを表します。

type IfStmt struct {
    If   token.Pos // "if" キーワードの位置
    Init Stmt      // 初期設定ステートメント; または nil
    Cond Expr      // 条件
    Body *BlockStmt
    Else Stmt // else 枝; または nil
}

func (*IfStmt) End

func (s *IfStmt) End() token.Pos

func (*IfStmt) Pos

func (s *IfStmt) Pos() token.Pos

type ImportSpec

ImportSpec ノードは単一パッケージのインポートを表します。

type ImportSpec struct {
    Doc     *CommentGroup // 関連ドキュメント; または nil
    Name    *Ident        // ローカルパッケージ名 ("." を含む); または nil
    Path    *BasicLit     // インポートパス
    Comment *CommentGroup // 行コメント; または nil
    EndPos  token.Pos     // 仕様の終わり (ゼロ以外の場合は Path.Pos をオーバーライドします)
}

func (*ImportSpec) End

func (s *ImportSpec) End() token.Pos

func (*ImportSpec) Pos

func (s *ImportSpec) Pos() token.Pos

type Importer

Importer (インポーター) は,パッケージオブジェクトへのインポートパスを解決します。 インポートマップは,既にインポートされたパッケージを,パッケージ ID でインデックス付けされたレコード (正規のインポートパス) を記録します。 Importer は,正規のインポート経路を決定し,それがインポートマップにすでに存在するかどうかを確かめるためにマップをチェックしなければなりません。 もしそうであれば,Importer はマップエントリを返すことができます。 そうでなければ,インポーターは与えられたパスのパッケージデータを新しい *Object (pkg) にロードし,インポートマップに pkg を記録してから pkg を返すべきです。

type Importer func(imports map[string]*Object, path string) (pkg *Object, err error)

type IncDecStmt

IncDecStmt ノードは,増分または減分ステートメントを表します。

type IncDecStmt struct {
    X      Expr
    TokPos token.Pos   // Tok の位置
    Tok    token.Token // INC または DEC
}

func (*IncDecStmt) End

func (s *IncDecStmt) End() token.Pos

func (*IncDecStmt) Pos

func (s *IncDecStmt) Pos() token.Pos

type IndexExpr

IndexExpr ノードは式とそれに続くインデックスを表します。

type IndexExpr struct {
    X      Expr      // 表現
    Lbrack token.Pos // "[" の位置
    Index  Expr      // インデックス式
    Rbrack token.Pos // "]" の位置
}

func (*IndexExpr) End

func (x *IndexExpr) End() token.Pos

func (*IndexExpr) Pos

func (x *IndexExpr) Pos() token.Pos

type InterfaceType

InterfaceType ノードは,インターフェースの種類を表します。

type InterfaceType struct {
    Interface  token.Pos  // "interface" キーワードの位置
    Methods    *FieldList // メソッド一覧
    Incomplete bool       // Methods リストに (ソース) メソッドがない場合は true
}

func (*InterfaceType) End

func (x *InterfaceType) End() token.Pos

func (*InterfaceType) Pos

func (x *InterfaceType) Pos() token.Pos

type KeyValueExpr

KeyValueExpr ノードは,複合リテラル内の (key : value) ペアを表します。

type KeyValueExpr struct {
    Key   Expr
    Colon token.Pos // ":" の位置
    Value Expr
}

func (*KeyValueExpr) End

func (x *KeyValueExpr) End() token.Pos

func (*KeyValueExpr) Pos

func (x *KeyValueExpr) Pos() token.Pos

type LabeledStmt

LabeledStmt ノードはラベル付きステートメントを表します。

type LabeledStmt struct {
    Label *Ident
    Colon token.Pos // ":" の位置
    Stmt  Stmt
}

func (*LabeledStmt) End

func (s *LabeledStmt) End() token.Pos

func (*LabeledStmt) Pos

func (s *LabeledStmt) Pos() token.Pos

type MapType

MapType ノードはマップ型を表します。

type MapType struct {
    Map   token.Pos // "map" キーワードの位置
    Key   Expr
    Value Expr
}

func (*MapType) End

func (x *MapType) End() token.Pos

func (*MapType) Pos

func (x *MapType) Pos() token.Pos

type MergeMode

MergeMode フラグは MergePackageFiles の動作を制御します。

type MergeMode uint
const (
    // 設定すると,重複する関数宣言は除外されます。
    FilterFuncDuplicates MergeMode = 1 << iota
    // 設定すると,特定の AST ノードに関連付けられていないコメント (Doc または Comment) は除外されます。
    FilterUnassociatedComments
    // 設定すると,重複したインポート宣言は除外されます。
    FilterImportDuplicates
)

type Node

すべてのノード型が Node インターフェースを実装します。

type Node interface {
    Pos() token.Pos // ノードに属する最初の文字の位置
    End() token.Pos // ノードの直後の最初の文字の位置
}

type ObjKind

ObjKind はオブジェクトが何を表しているかを記述します。

type ObjKind int

可能なオブジェクトの種類のリスト。

const (
    Bad ObjKind = iota // エラー処理用
    Pkg                // パッケージ
    Con                // 定数
    Typ                // 型
    Var                // 変数
    Fun                // 関数またはメソッド
    Lbl                // ラベル
)

func (ObjKind) String

func (kind ObjKind) String() string

type Object

Object (オブジェクト) は,パッケージ,定数,型,変数,関数 (メソッドを含む) ,ラベルなどの名前付き言語エンティティを表します。

Data フィールドには,オブジェクト固有のデータが含まれています。

種類     データ型           データ値
Pkg     *Scope            パッケージスコープ
Con     int               それぞれの宣言の iota
type Object struct {
    Kind ObjKind
    Name string      // 宣言名
    Decl interface{} // 対応する Field , XxxSpec , FuncDecl , LabeledStmt , AssignStmt , Scope, あるいは nil
    Data interface{} // オブジェクト固有のデータまたは nil
    Type interface{} // 型情報のプレースホルダー。 nil かもしれません
}

func NewObj

func NewObj(kind ObjKind, name string) *Object

NewObj は与えられた種類と名前の新しいオブジェクトを作成します。

func (*Object) Pos

func (obj *Object) Pos() token.Pos

Pos は,オブジェクト名の宣言のソース位置を計算します。 計算できない場合,結果は無効な位置になる可能性があります (obj.Decl が nil であるか正しくない可能性があります) 。

type Package

Package ノードは, Go パッケージをまとめて構築する一連のソースファイルを表します。

type Package struct {
    Name    string             // パッケージ名
    Scope   *Scope             // 全ファイルにわたるパッケージスコープ
    Imports map[string]*Object // パッケージ ID のマップ -> パッケージオブジェクト
    Files   map[string]*File   // Go ソースファイル名
}

func NewPackage

func NewPackage(fset *token.FileSet, files map[string]*File, importer Importer, universe *Scope) (*Package, error)

NewPackage は,一連の File ノードから新しい Package ノードを作成します。 ファイル全体の未解決の識別子を解決し,それに応じて各ファイルの未解決リストを更新します。 nil 以外のインポーターとユニバーススコープが渡されている場合,それらはどのパッケージファイルでも宣言されていない識別子を解決するために使用されます。 未解決の残りの識別子は,未宣言として報告されます。 ファイルが異なるパッケージに属している場合は, 1 つのパッケージ名が選択され,異なるパッケージ名のファイルが報告されてから無視されます。 結果はパッケージノードとエラーがあった場合は scanner.ErrorList です。

func (*Package) End

func (p *Package) End() token.Pos

func (*Package) Pos

func (p *Package) Pos() token.Pos

type ParenExpr

ParenExpr ノードは括弧で囲まれた式を表します。

type ParenExpr struct {
    Lparen token.Pos // "(" の位置
    X      Expr      // かっこで囲まれた式
    Rparen token.Pos // ")" の位置
}

func (*ParenExpr) End

func (x *ParenExpr) End() token.Pos

func (*ParenExpr) Pos

func (x *ParenExpr) Pos() token.Pos

type RangeStmt

RangeStmt は,範囲句を含む for ステートメントを表します。

type RangeStmt struct {
    For        token.Pos   // for キーワードの位置
    Key, Value Expr        // Key, Value は nil かもしれない
    TokPos     token.Pos   // Tok の位置; Key == nil の場合は無効
    Tok        token.Token // Key == nil の場合は ILLEGAL, ASSIGN, DEFINE
    X          Expr        // 範囲値
    Body       *BlockStmt
}

func (*RangeStmt) End

func (s *RangeStmt) End() token.Pos

func (*RangeStmt) Pos

func (s *RangeStmt) Pos() token.Pos

type ReturnStmt

ReturnStmt ノードは return ステートメントを表します。

type ReturnStmt struct {
    Return  token.Pos // "return" キーワードの位置
    Results []Expr    // 結果式; または nil
}

func (*ReturnStmt) End

func (s *ReturnStmt) End() token.Pos

func (*ReturnStmt) Pos

func (s *ReturnStmt) Pos() token.Pos

type Scope

Scope (スコープ) は,そのスコープ内で宣言された名前付き言語エンティティのセットと,すぐ周囲の (外側の) スコープへのリンクを維持します。

type Scope struct {
    Outer   *Scope
    Objects map[string]*Object
}

func NewScope

func NewScope(outer *Scope) *Scope

NewScope は,外側のスコープにネストされた新しいスコープを作成します。

func (*Scope) Insert

func (s *Scope) Insert(obj *Object) (alt *Object)

Insert は名前付きオブジェクト obj をスコープ s に挿入しようとします。 スコープに同じ名前のオブジェクト alt がすでに含まれている場合, Insert はスコープを変更せずに alt を返します。 そうでなければ, obj を挿入して nil を返します。

func (*Scope) Lookup

func (s *Scope) Lookup(name string) *Object

Lookup は,スコープ s 中の,指定された名前のオブジェクトを返します。 見つからなかった場合は nil を返します。 外側のスコープは無視されます。

func (*Scope) String

func (s *Scope) String() string

デバッグサポート

type SelectStmt

SelectStmt ノードは select ステートメントを表します。

type SelectStmt struct {
    Select token.Pos  // "select" キーワードの位置
    Body   *BlockStmt // CommClauses のみ
}

func (*SelectStmt) End

func (s *SelectStmt) End() token.Pos

func (*SelectStmt) Pos

func (s *SelectStmt) Pos() token.Pos

type SelectorExpr

SelectorExpr ノードは式とそれに続くセレクターを表します。

type SelectorExpr struct {
    X   Expr   // 表現
    Sel *Ident // フィールドセレクタ
}

func (*SelectorExpr) End

func (x *SelectorExpr) End() token.Pos

func (*SelectorExpr) Pos

func (x *SelectorExpr) Pos() token.Pos

type SendStmt

SendStmt ノードは送信ステートメントを表します。

type SendStmt struct {
    Chan  Expr
    Arrow token.Pos // "<-" の位置
    Value Expr
}

func (*SendStmt) End

func (s *SendStmt) End() token.Pos

func (*SendStmt) Pos

func (s *SendStmt) Pos() token.Pos

type SliceExpr

SliceExpr ノードは式とそれに続くスライスインデックスを表します。

type SliceExpr struct {
    X      Expr      // 表現
    Lbrack token.Pos // "[" の位置
    Low    Expr      // スライス範囲の始まり; または nil
    High   Expr      // スライス範囲の終わり; または nil
    Max    Expr      // スライスの最大容量; または nil; added in Go 1.2
    Slice3 bool      // 3 インデックススライス (2 コロンが存在する) の場合は true; added in Go 1.2
    Rbrack token.Pos // "]" の位置
}

func (*SliceExpr) End

func (x *SliceExpr) End() token.Pos

func (*SliceExpr) Pos

func (x *SliceExpr) Pos() token.Pos

type Spec

Spec 型は *ImportSpec, *ValueSpec ,および *TypeSpec のいずれかを表します。

type Spec interface {
    Node
    // contains filtered or unexported methods
}

type StarExpr

StarExpr ノードは, "*" 式の式を表します。 意味的には,それは単項 "*" 式,またはポインタ型である可能性があります。

type StarExpr struct {
    Star token.Pos // "*" の位置
    X    Expr      // オペランド
}

func (*StarExpr) End

func (x *StarExpr) End() token.Pos

func (*StarExpr) Pos

func (x *StarExpr) Pos() token.Pos

type Stmt

すべてのステートメントノードは Stmt インターフェースを実装します。

type Stmt interface {
    Node
    // contains filtered or unexported methods
}

type StructType

StructType ノードは構造体型を表します。

type StructType struct {
    Struct     token.Pos  // "struct" キーワードの位置
    Fields     *FieldList // フィールド宣言のリスト
    Incomplete bool       // [フィールド] リストに (ソース) フィールドがない場合は true
}

func (*StructType) End

func (x *StructType) End() token.Pos

func (*StructType) Pos

func (x *StructType) Pos() token.Pos

type SwitchStmt

SwitchStmt ノードは式の switch ステートメントを表します。

type SwitchStmt struct {
    Switch token.Pos  // "switch" キーワードの位置
    Init   Stmt       // 初期設定ステートメント; または nil
    Tag    Expr       // タグ式; または nil
    Body   *BlockStmt // CaseClauses のみ
}

func (*SwitchStmt) End

func (s *SwitchStmt) End() token.Pos

func (*SwitchStmt) Pos

func (s *SwitchStmt) Pos() token.Pos

type TypeAssertExpr

TypeAssertExpr ノードは,式とそれに続く型アサーションを表します。

type TypeAssertExpr struct {
    X      Expr      // 表現
    Lparen token.Pos // "(" の位置; added in Go 1.2
    Type   Expr      // アサート型; nil は型変換 X.(type) を意味します。
    Rparen token.Pos // ")" の位置; added in Go 1.2
}

func (*TypeAssertExpr) End

func (x *TypeAssertExpr) End() token.Pos

func (*TypeAssertExpr) Pos

func (x *TypeAssertExpr) Pos() token.Pos

type TypeSpec

TypeSpec ノードは型宣言を表します (TypeSpec の生成) 。

type TypeSpec struct {
    Doc     *CommentGroup // 関連ドキュメント; または nil
    Name    *Ident        // 型名
    Assign  token.Pos     // もしあれば '=' の位置; added in Go 1.9
    Type    Expr          // *Ident, *ParenExpr, *SelectorExpr, *StarExpr ,または *XxxType のいずれか
    Comment *CommentGroup // 行コメント; または nil
}

func (*TypeSpec) End

func (s *TypeSpec) End() token.Pos

func (*TypeSpec) Pos

func (s *TypeSpec) Pos() token.Pos

type TypeSwitchStmt

TypeSwitchStmt ノードは,型切り替えステートメントを表します。

type TypeSwitchStmt struct {
    Switch token.Pos  // "switch" キーワードの位置
    Init   Stmt       // 初期設定ステートメント; または nil
    Assign Stmt       // x := y.(type) または y.(type)
    Body   *BlockStmt // CaseClauses のみ
}

func (*TypeSwitchStmt) End

func (s *TypeSwitchStmt) End() token.Pos

func (*TypeSwitchStmt) Pos

func (s *TypeSwitchStmt) Pos() token.Pos

type UnaryExpr

UnaryExpr ノードは,単項式を表します。 単項の "*" 式は StarExpr ノードで表現されます。

type UnaryExpr struct {
    OpPos token.Pos   // Op の位置
    Op    token.Token // オペレーター
    X     Expr        // オペランド
}

func (*UnaryExpr) End

func (x *UnaryExpr) End() token.Pos

func (*UnaryExpr) Pos

func (x *UnaryExpr) Pos() token.Pos

type ValueSpec

ValueSpec ノードは,定数または変数の宣言 (ConstSpec または VarSpec の生成) を表します。

type ValueSpec struct {
    Doc     *CommentGroup // 関連ドキュメント; または nil
    Names   []*Ident      // 値の名前 (len(Names) > 0)
    Type    Expr          // 値の型; または nil
    Values  []Expr        // 初期値; または nil
    Comment *CommentGroup // 行コメント; または nil
}

func (*ValueSpec) End

func (s *ValueSpec) End() token.Pos

func (*ValueSpec) Pos

func (s *ValueSpec) Pos() token.Pos

type Visitor

Visitorの Visit メソッドは, Walk によって検出された各ノードに対して呼び出されます。 結果のVisitor w が nil でない場合, Walk はVisitor w と共に node の子のそれぞれを訪問し,続いて w.Visit(nil) を呼び出します。

type Visitor interface {
    Visit(node Node) (w Visitor)
}