...

パッケージ types

import "go/types"
概要
目次

概要 ▾

types パッケージは,データ型を宣言し, Go パッケージの型チェックアルゴリズムを実装します。 パッケージの型チェックを行うには, Config.Check を呼び出します。 あるいは,NewChecker で新たな型チェッカーを作成し, Checker.Files を呼び出します。

型チェックは,相互に依存し合ういくつかのフェーズで構成されています。

名前解決は,プログラム内の各識別子 (ast.Ident) をそれが表す言語オブジェクト (Object) にマップします。 名前解決の結果については,Info.{Defs,Uses,Implicits} を使用します。

定数のたたみ込みは,コンパイル時定数であるすべての式 (ast.Expr) の正確な定数値 (constant.Value) を計算します。 定数の畳み込みの結果には, Info.Types[expr].Value を使用します。

型推論はすべての式 (ast.Expr) の型 (Type) を計算し,言語仕様への準拠をチェックします。 型推論の結果には, Info.Types[expr].Type を使用します。

チュートリアルについては, https://golang.org/s/types-tutorial を参照してください。

目次 ▾

変数
func AssertableTo(V *Interface, T Type) bool
func AssignableTo(V, T Type) bool
func CheckExpr(fset *token.FileSet, pkg *Package, pos token.Pos, expr ast.Expr, info *Info) (err error)
func Comparable(T Type) bool
func ConvertibleTo(V, T Type) bool
func DefPredeclaredTestFuncs()
func ExprString(x ast.Expr) string
func Id(pkg *Package, name string) string
func Identical(x, y Type) bool
func IdenticalIgnoreTags(x, y Type) bool
func Implements(V Type, T *Interface) bool
func IsInterface(typ Type) bool
func ObjectString(obj Object, qf Qualifier) string
func SelectionString(s *Selection, qf Qualifier) string
func TypeString(typ Type, qf Qualifier) string
func WriteExpr(buf *bytes.Buffer, x ast.Expr)
func WriteSignature(buf *bytes.Buffer, sig *Signature, qf Qualifier)
func WriteType(buf *bytes.Buffer, typ Type, qf Qualifier)
type Array
    func NewArray(elem Type, len int64) *Array
    func (a *Array) Elem() Type
    func (a *Array) Len() int64
    func (a *Array) String() string
    func (a *Array) Underlying() Type
type Basic
    func (b *Basic) Info() BasicInfo
    func (b *Basic) Kind() BasicKind
    func (b *Basic) Name() string
    func (b *Basic) String() string
    func (b *Basic) Underlying() Type
type BasicInfo
type BasicKind
type Builtin
    func (obj *Builtin) Exported() bool
    func (obj *Builtin) Id() string
    func (obj *Builtin) Name() string
    func (obj *Builtin) Parent() *Scope
    func (obj *Builtin) Pkg() *Package
    func (obj *Builtin) Pos() token.Pos
    func (obj *Builtin) String() string
    func (obj *Builtin) Type() Type
type Chan
    func NewChan(dir ChanDir, elem Type) *Chan
    func (c *Chan) Dir() ChanDir
    func (c *Chan) Elem() Type
    func (c *Chan) String() string
    func (c *Chan) Underlying() Type
type ChanDir
type Checker
    func NewChecker(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker
    func (check *Checker) Files(files []*ast.File) error
type Config
    func (conf *Config) Check(path string, fset *token.FileSet, files []*ast.File, info *Info) (*Package, error)
type Const
    func NewConst(pos token.Pos, pkg *Package, name string, typ Type, val constant.Value) *Const
    func (obj *Const) Exported() bool
    func (obj *Const) Id() string
    func (obj *Const) Name() string
    func (obj *Const) Parent() *Scope
    func (obj *Const) Pkg() *Package
    func (obj *Const) Pos() token.Pos
    func (obj *Const) String() string
    func (obj *Const) Type() Type
    func (obj *Const) Val() constant.Value
type Error
    func (err Error) Error() string
type Func
    func MissingMethod(V Type, T *Interface, static bool) (method *Func, wrongType bool)
    func NewFunc(pos token.Pos, pkg *Package, name string, sig *Signature) *Func
    func (obj *Func) Exported() bool
    func (obj *Func) FullName() string
    func (obj *Func) Id() string
    func (obj *Func) Name() string
    func (obj *Func) Parent() *Scope
    func (obj *Func) Pkg() *Package
    func (obj *Func) Pos() token.Pos
    func (obj *Func) Scope() *Scope
    func (obj *Func) String() string
    func (obj *Func) Type() Type
type ImportMode
type Importer
type ImporterFrom
type Info
    func (info *Info) ObjectOf(id *ast.Ident) Object
    func (info *Info) TypeOf(e ast.Expr) Type
type Initializer
    func (init *Initializer) String() string
type Interface
    func NewInterface(methods []*Func, embeddeds []*Named) *Interface
    func NewInterfaceType(methods []*Func, embeddeds []Type) *Interface
    func (t *Interface) Complete() *Interface
    func (t *Interface) Embedded(i int) *Named
    func (t *Interface) EmbeddedType(i int) Type
    func (t *Interface) Empty() bool
    func (t *Interface) ExplicitMethod(i int) *Func
    func (t *Interface) Method(i int) *Func
    func (t *Interface) NumEmbeddeds() int
    func (t *Interface) NumExplicitMethods() int
    func (t *Interface) NumMethods() int
    func (t *Interface) String() string
    func (t *Interface) Underlying() Type
type Label
    func NewLabel(pos token.Pos, pkg *Package, name string) *Label
    func (obj *Label) Exported() bool
    func (obj *Label) Id() string
    func (obj *Label) Name() string
    func (obj *Label) Parent() *Scope
    func (obj *Label) Pkg() *Package
    func (obj *Label) Pos() token.Pos
    func (obj *Label) String() string
    func (obj *Label) Type() Type
type Map
    func NewMap(key, elem Type) *Map
    func (m *Map) Elem() Type
    func (m *Map) Key() Type
    func (m *Map) String() string
    func (m *Map) Underlying() Type
type MethodSet
    func NewMethodSet(T Type) *MethodSet
    func (s *MethodSet) At(i int) *Selection
    func (s *MethodSet) Len() int
    func (s *MethodSet) Lookup(pkg *Package, name string) *Selection
    func (s *MethodSet) String() string
type Named
    func NewNamed(obj *TypeName, underlying Type, methods []*Func) *Named
    func (t *Named) AddMethod(m *Func)
    func (t *Named) Method(i int) *Func
    func (t *Named) NumMethods() int
    func (t *Named) Obj() *TypeName
    func (t *Named) SetUnderlying(underlying Type)
    func (t *Named) String() string
    func (t *Named) Underlying() Type
type Nil
    func (obj *Nil) Exported() bool
    func (obj *Nil) Id() string
    func (obj *Nil) Name() string
    func (obj *Nil) Parent() *Scope
    func (obj *Nil) Pkg() *Package
    func (obj *Nil) Pos() token.Pos
    func (obj *Nil) String() string
    func (obj *Nil) Type() Type
type Object
    func LookupFieldOrMethod(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)
type Package
    func NewPackage(path, name string) *Package
    func (pkg *Package) Complete() bool
    func (pkg *Package) Imports() []*Package
    func (pkg *Package) MarkComplete()
    func (pkg *Package) Name() string
    func (pkg *Package) Path() string
    func (pkg *Package) Scope() *Scope
    func (pkg *Package) SetImports(list []*Package)
    func (pkg *Package) SetName(name string)
    func (pkg *Package) String() string
type PkgName
    func NewPkgName(pos token.Pos, pkg *Package, name string, imported *Package) *PkgName
    func (obj *PkgName) Exported() bool
    func (obj *PkgName) Id() string
    func (obj *PkgName) Imported() *Package
    func (obj *PkgName) Name() string
    func (obj *PkgName) Parent() *Scope
    func (obj *PkgName) Pkg() *Package
    func (obj *PkgName) Pos() token.Pos
    func (obj *PkgName) String() string
    func (obj *PkgName) Type() Type
type Pointer
    func NewPointer(elem Type) *Pointer
    func (p *Pointer) Elem() Type
    func (p *Pointer) String() string
    func (p *Pointer) Underlying() Type
type Qualifier
    func RelativeTo(pkg *Package) Qualifier
type Scope
    func NewScope(parent *Scope, pos, end token.Pos, comment string) *Scope
    func (s *Scope) Child(i int) *Scope
    func (s *Scope) Contains(pos token.Pos) bool
    func (s *Scope) End() token.Pos
    func (s *Scope) Innermost(pos token.Pos) *Scope
    func (s *Scope) Insert(obj Object) Object
    func (s *Scope) Len() int
    func (s *Scope) Lookup(name string) Object
    func (s *Scope) LookupParent(name string, pos token.Pos) (*Scope, Object)
    func (s *Scope) Names() []string
    func (s *Scope) NumChildren() int
    func (s *Scope) Parent() *Scope
    func (s *Scope) Pos() token.Pos
    func (s *Scope) String() string
    func (s *Scope) WriteTo(w io.Writer, n int, recurse bool)
type Selection
    func (s *Selection) Index() []int
    func (s *Selection) Indirect() bool
    func (s *Selection) Kind() SelectionKind
    func (s *Selection) Obj() Object
    func (s *Selection) Recv() Type
    func (s *Selection) String() string
    func (s *Selection) Type() Type
type SelectionKind
type Signature
    func NewSignature(recv *Var, params, results *Tuple, variadic bool) *Signature
    func (s *Signature) Params() *Tuple
    func (s *Signature) Recv() *Var
    func (s *Signature) Results() *Tuple
    func (s *Signature) String() string
    func (s *Signature) Underlying() Type
    func (s *Signature) Variadic() bool
type Sizes
    func SizesFor(compiler, arch string) Sizes
type Slice
    func NewSlice(elem Type) *Slice
    func (s *Slice) Elem() Type
    func (s *Slice) String() string
    func (s *Slice) Underlying() Type
type StdSizes
    func (s *StdSizes) Alignof(T Type) int64
    func (s *StdSizes) Offsetsof(fields []*Var) []int64
    func (s *StdSizes) Sizeof(T Type) int64
type Struct
    func NewStruct(fields []*Var, tags []string) *Struct
    func (s *Struct) Field(i int) *Var
    func (s *Struct) NumFields() int
    func (s *Struct) String() string
    func (s *Struct) Tag(i int) string
    func (s *Struct) Underlying() Type
type Tuple
    func NewTuple(x ...*Var) *Tuple
    func (t *Tuple) At(i int) *Var
    func (t *Tuple) Len() int
    func (t *Tuple) String() string
    func (t *Tuple) Underlying() Type
type Type
    func Default(typ Type) Type
type TypeAndValue
    func Eval(fset *token.FileSet, pkg *Package, pos token.Pos, expr string) (_ TypeAndValue, err error)
    func (tv TypeAndValue) Addressable() bool
    func (tv TypeAndValue) Assignable() bool
    func (tv TypeAndValue) HasOk() bool
    func (tv TypeAndValue) IsBuiltin() bool
    func (tv TypeAndValue) IsNil() bool
    func (tv TypeAndValue) IsType() bool
    func (tv TypeAndValue) IsValue() bool
    func (tv TypeAndValue) IsVoid() bool
type TypeName
    func NewTypeName(pos token.Pos, pkg *Package, name string, typ Type) *TypeName
    func (obj *TypeName) Exported() bool
    func (obj *TypeName) Id() string
    func (obj *TypeName) IsAlias() bool
    func (obj *TypeName) Name() string
    func (obj *TypeName) Parent() *Scope
    func (obj *TypeName) Pkg() *Package
    func (obj *TypeName) Pos() token.Pos
    func (obj *TypeName) String() string
    func (obj *TypeName) Type() Type
type Var
    func NewField(pos token.Pos, pkg *Package, name string, typ Type, embedded bool) *Var
    func NewParam(pos token.Pos, pkg *Package, name string, typ Type) *Var
    func NewVar(pos token.Pos, pkg *Package, name string, typ Type) *Var
    func (obj *Var) Anonymous() bool
    func (obj *Var) Embedded() bool
    func (obj *Var) Exported() bool
    func (obj *Var) Id() string
    func (obj *Var) IsField() bool
    func (obj *Var) Name() string
    func (obj *Var) Parent() *Scope
    func (obj *Var) Pkg() *Package
    func (obj *Var) Pos() token.Pos
    func (obj *Var) String() string
    func (obj *Var) Type() Type

Info
MethodSet
Scope

パッケージファイル

api.go assignments.go builtins.go call.go check.go conversions.go decl.go errors.go eval.go expr.go exprstring.go gccgosizes.go initorder.go interfaces.go labels.go lookup.go methodset.go object.go objset.go operand.go package.go predicates.go resolver.go return.go scope.go selection.go sizes.go stmt.go type.go typestring.go typexpr.go universe.go

変数

Typ には,対応する BasicKind によってインデックスが付けられた事前宣言された *Basic 型が含まれています。

Typ[Byte] の * 基本型は "uint8" という名前になります。 Universe.Lookup("byte").Type() を使用して, "byte" という名前の特定の別名基本型 (および "rune" に類似) を取得します。

var Typ = []*Basic{
    Invalid: {Invalid, 0, "invalid type"},

    Bool:          {Bool, IsBoolean, "bool"},
    Int:           {Int, IsInteger, "int"},
    Int8:          {Int8, IsInteger, "int8"},
    Int16:         {Int16, IsInteger, "int16"},
    Int32:         {Int32, IsInteger, "int32"},
    Int64:         {Int64, IsInteger, "int64"},
    Uint:          {Uint, IsInteger | IsUnsigned, "uint"},
    Uint8:         {Uint8, IsInteger | IsUnsigned, "uint8"},
    Uint16:        {Uint16, IsInteger | IsUnsigned, "uint16"},
    Uint32:        {Uint32, IsInteger | IsUnsigned, "uint32"},
    Uint64:        {Uint64, IsInteger | IsUnsigned, "uint64"},
    Uintptr:       {Uintptr, IsInteger | IsUnsigned, "uintptr"},
    Float32:       {Float32, IsFloat, "float32"},
    Float64:       {Float64, IsFloat, "float64"},
    Complex64:     {Complex64, IsComplex, "complex64"},
    Complex128:    {Complex128, IsComplex, "complex128"},
    String:        {String, IsString, "string"},
    UnsafePointer: {UnsafePointer, 0, "Pointer"},

    UntypedBool:    {UntypedBool, IsBoolean | IsUntyped, "untyped bool"},
    UntypedInt:     {UntypedInt, IsInteger | IsUntyped, "untyped int"},
    UntypedRune:    {UntypedRune, IsInteger | IsUntyped, "untyped rune"},
    UntypedFloat:   {UntypedFloat, IsFloat | IsUntyped, "untyped float"},
    UntypedComplex: {UntypedComplex, IsComplex | IsUntyped, "untyped complex"},
    UntypedString:  {UntypedString, IsString | IsUntyped, "untyped string"},
    UntypedNil:     {UntypedNil, IsUntyped, "untyped nil"},
}

func AssertableTo 1.5

func AssertableTo(V *Interface, T Type) bool

AssertableTo は, V 型の値を T 型にすることができるかどうかを報告します。

func AssignableTo 1.5

func AssignableTo(V, T Type) bool

AssignableTo は, V 型の値が T 型の変数に代入可能かどうかを報告します。

func CheckExpr 1.13

func CheckExpr(fset *token.FileSet, pkg *Package, pos token.Pos, expr ast.Expr, info *Info) (err error)

CheckExpr 型は,式 expr が pkg パッケージの位置 pos に出現したかのようにチェックします。 式に関する型情報は info に記録されます。

pkg == nil の場合,ユニバーススコープが使用され,指定された位置 pos は無視されます。 pkg != nil で pos が無効な場合は,パッケージスコープが使用されます。 そうでなければ, pos はパッケージに属していなければなりません。

pos がパッケージ内にない場合,またはノードの型チェックができない場合,エラーが返されます。

注: 型と値を計算するために Check を実行する代わりに Eval と CheckExpr を使用しないでください。ただし, Check に加えて,これらの関数は式が使用されるコンテキスト (代入など) を無視します。 したがって,トップレベルの型なし定数は,それぞれのコンテキスト固有の型ではなく,型なしの型を返します。

func Comparable 1.5

func Comparable(T Type) bool

Comparable は,T 型の値が比較可能かどうかを報告します。

func ConvertibleTo 1.5

func ConvertibleTo(V, T Type) bool

ConvertibleTo は, V 型の値が T 型の値に変換可能かどうかを報告します。

func DefPredeclaredTestFuncs 1.5

func DefPredeclaredTestFuncs()

DefPredeclaredTestFuncs は assert および trace ビルトインを定義します。 これらの組み込みは,このパッケージのデバッグとテストのみを目的としています。

func ExprString 1.5

func ExprString(x ast.Expr) string

ExprString は x の (おそらく短縮された) 文字列表現を返します。 短縮表現はユーザーインターフェースに適していますが,必ずしも Go 構文に従うとは限りません。

func Id 1.5

func Id(pkg *Package, name string) string

Id はエクスポートされていれば name を返し,そうでなければパッケージパスで修飾された名前を返します。

func Identical 1.5

func Identical(x, y Type) bool

Identical は,x と y が同じ型であるかどうかを報告します。 Signature 型の受信者は無視されます。

func IdenticalIgnoreTags 1.8

func IdenticalIgnoreTags(x, y Type) bool

IdenticalIgnoreTags は,タグが無視された場合に x と y が同じ型かどうかを報告します。 Signature 型の受信者は無視されます。

func Implements 1.5

func Implements(V Type, T *Interface) bool

Implements は,型 V がインターフェース T を実装しているかどうかを報告します。

func IsInterface 1.5

func IsInterface(typ Type) bool

IsInterface は, typ がインターフェース型かどうかを報告します。

func ObjectString 1.5

func ObjectString(obj Object, qf Qualifier) string

ObjectString は, obj の文字列形式を返します。 修飾子はパッケージレベルのオブジェクトの表示を制御します。 nil でも構いません。

func SelectionString 1.5

func SelectionString(s *Selection, qf Qualifier) string

SelectionString は,文字列形式の s を返します。 修飾子はパッケージレベルのオブジェクトの表示を制御します。 nil でも構いません。

例 :

"field (T) f int"
"method (T) f(X) Y"
"method expr (T) f(X) Y"

func TypeString 1.5

func TypeString(typ Type, qf Qualifier) string

TypeString は, typ の文字列表現を返します。 修飾子はパッケージレベルのオブジェクトの表示を制御します。 nil でも構いません。

func WriteExpr 1.5

func WriteExpr(buf *bytes.Buffer, x ast.Expr)

WriteExpr は x の (おそらく短縮された) 文字列表現を buf に書き込みます。 短縮表現はユーザーインターフェースに適していますが,必ずしも Go 構文に従うとは限りません。

func WriteSignature 1.5

func WriteSignature(buf *bytes.Buffer, sig *Signature, qf Qualifier)

WriteSignature は,先頭に "func" キーワードを付けずに,シグニチャ sig の表現を buf に書き込みます。 修飾子はパッケージレベルのオブジェクトの表示を制御します。 nil でも構いません。

func WriteType 1.5

func WriteType(buf *bytes.Buffer, typ Type, qf Qualifier)

WriteType は, typ の文字列表現を buf に書き込みます。 修飾子はパッケージレベルのオブジェクトの表示を制御します。 nil でも構いません。

type Array 1.5

Array は配列型を表します。

type Array struct {
    // エクスポートされていないフィールドがあります
}

func NewArray 1.5

func NewArray(elem Type, len int64) *Array

NewArray は与えられた要素型と長さに対して新しい配列型を返す。 負の長さは未知の長さを示します。

func (*Array) Elem 1.5

func (a *Array) Elem() Type

Elem は配列 a の要素型を返します。

func (*Array) Len 1.5

func (a *Array) Len() int64

Len は配列 a の長さを返します。 負の結果は,長さが不明であることを示します。

func (*Array) String 1.5

func (a *Array) String() string

func (*Array) Underlying 1.5

func (a *Array) Underlying() Type

type Basic 1.5

Basic は基本型を表します。

type Basic struct {
    // エクスポートされていないフィールドがあります
}

func (*Basic) Info 1.5

func (b *Basic) Info() BasicInfo

Info は基本型 b のプロパティに関する情報を返します。

func (*Basic) Kind 1.5

func (b *Basic) Kind() BasicKind

Kind は基本型 b の種類を返します。

func (*Basic) Name 1.5

func (b *Basic) Name() string

Name は基本型 b の名前を返します。

func (*Basic) String 1.5

func (b *Basic) String() string

func (*Basic) Underlying 1.5

func (b *Basic) Underlying() Type

type BasicInfo 1.5

BasicInfo は,基本型のプロパティを記述する一連のフラグです。

type BasicInfo int

基本型のプロパティ

const (
    IsBoolean BasicInfo = 1 << iota
    IsInteger
    IsUnsigned
    IsFloat
    IsComplex
    IsString
    IsUntyped

    IsOrdered   = IsInteger | IsFloat | IsString
    IsNumeric   = IsInteger | IsFloat | IsComplex
    IsConstType = IsBoolean | IsNumeric | IsString
)

type BasicKind 1.5

BasicKind は基本型の種類を表します。

type BasicKind int
const (
    Invalid BasicKind = iota // 型が無効です

    // 事前宣言されている型
    Bool
    Int
    Int8
    Int16
    Int32
    Int64
    Uint
    Uint8
    Uint16
    Uint32
    Uint64
    Uintptr
    Float32
    Float64
    Complex64
    Complex128
    String
    UnsafePointer

    // 型なし値の型
    UntypedBool
    UntypedInt
    UntypedRune
    UntypedFloat
    UntypedComplex
    UntypedString
    UntypedNil

    // エイリアス
    Byte = Uint8
    Rune = Int32
)

type Builtin 1.5

Builtin は組み込み関数を表します。 組み込み関数には有効な型がありません。

type Builtin struct {
    // エクスポートされていないフィールドがあります
}

func (*Builtin) Exported 1.5

func (obj *Builtin) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Builtin) Id 1.5

func (obj *Builtin) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Builtin) Name 1.5

func (obj *Builtin) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Builtin) Parent 1.5

func (obj *Builtin) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Builtin) Pkg 1.5

func (obj *Builtin) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Builtin) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Builtin) String 1.5

func (obj *Builtin) String() string

func (*Builtin) Type 1.5

func (obj *Builtin) Type() Type

Type はオブジェクトの型を返します。

type Chan 1.5

Chan はチャンネル型を表します。

type Chan struct {
    // エクスポートされていないフィールドがあります
}

func NewChan 1.5

func NewChan(dir ChanDir, elem Type) *Chan

NewChan は,与えられた方向と要素型に対して新しいチャンネル型を返します。

func (*Chan) Dir 1.5

func (c *Chan) Dir() ChanDir

Dir はチャンネル c の方向を返します。

func (*Chan) Elem 1.5

func (c *Chan) Elem() Type

Elem はチャンネル c の要素型を返します。

func (*Chan) String 1.5

func (c *Chan) String() string

func (*Chan) Underlying 1.5

func (c *Chan) Underlying() Type

type ChanDir 1.5

ChanDir 値はチャンネルの方向を示します。

type ChanDir int

チャンネルの方向は,これらの定数の 1 つによって示されます。

const (
    SendRecv ChanDir = iota
    SendOnly
    RecvOnly
)

type Checker 1.5

Checker は型チェッカーの状態を管理します。 NewChecker で作成する必要があります。

type Checker struct {
    *Info
    // エクスポートされていないフィールドがあります
}

func NewChecker 1.5

func NewChecker(conf *Config, fset *token.FileSet, pkg *Package, info *Info) *Checker

NewChecker は与えられたパッケージの新しい Checker インスタンスを返します。 パッケージファイルは checker.Files を介して段階的に追加することができます。

func (*Checker) Files 1.5

func (check *Checker) Files(files []*ast.File) error

ファイルは渡されたファイルをチェッカーのパッケージの一部としてチェックします。

type Config 1.5

Config は型チェックのための設定を指定します。 Config のゼロ値は,すぐに使用できるデフォルト設定です。

type Config struct {
    // IgnoreFuncBodies が設定されている場合,関数本体は型チェックされません。
    IgnoreFuncBodies bool

    // FakeImportC が設定されている場合, (Cgo を必要とするパッケージのための) `import "C"` は空の "C" パッケージを宣言し,パッケージ C を参照する修飾識別子のためのエラーは除外されます。
    // この機能は標準ライブラリの cmd/api ツールを対象としています。
    //
    // Caution: 後続のエラーにより,影響が予測できない場合があります。
    // 気軽に使用しないでください !
    FakeImportC bool

    // Error != nil の場合,型チェック中に見つかったエラーごとに呼び出されます。
    // err は動的型 Error を持ちます。
    // 二次エラー (たとえば,無効な再帰型宣言に含まれるすべての型を列挙する) には, '\t' 文字で始まるエラー文字列があります。
    // Error == nil の場合,最初のエラーが見つかったときに型チェックが停止します。
    Error func(err error)

    // Importer は,インポート宣言から参照されるパッケージをインポートするために使用されます。
    // インストールされたインポーターが ImporterFrom を実装している場合,型チェッカーは Import の代わりに ImportFrom を呼び出します。
    // インポーターが必要だがインストールされていない場合,型チェッカーはエラーを報告します。
    Importer Importer

    // Sizes != nil の場合,安全でないパッケージのサイジング関数が渡されます。
    // それ以外の場合は,代わりに SizesFor("gc", "amd64") が使用されます。
    Sizes Sizes

    // DisableUnusedImportCheck が設定されている場合,パッケージの未使用のインポートはチェックされません。
    DisableUnusedImportCheck bool
}

func (*Config) Check 1.5

func (conf *Config) Check(path string, fset *token.FileSet, files []*ast.File, info *Info) (*Package, error)

Check はパッケージを型チェックし,結果のパッケージオブジェクトと,もしあれば最初のエラーを返します。 さらに, info != nil の場合, Check は Info 構造体の各 nil 以外のマップに値を設定します。

エラーが発生しなかった場合,パッケージは完了とマークされ,それ以外の場合は完了していません。 エラーが発生した場合の動作の制御については Config.Error を参照してください。

パッケージは, *ast.Files とそれに対応するファイルセットのリスト,およびパッケージが識別されるパッケージパスによって指定されます。 クリーンパスは,空またはドット (".") にしないでください。

type Const 1.5

Const は宣言された定数を表します。

type Const struct {
    // エクスポートされていないフィールドがあります
}

func NewConst 1.5

func NewConst(pos token.Pos, pkg *Package, name string, typ Type, val constant.Value) *Const

NewConst は,値 val を持つ新しい定数を返します。 残りの引数は,すべてのオブジェクトで見つかった属性を設定します。

func (*Const) Exported 1.5

func (obj *Const) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Const) Id 1.5

func (obj *Const) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Const) Name 1.5

func (obj *Const) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Const) Parent 1.5

func (obj *Const) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Const) Pkg 1.5

func (obj *Const) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Const) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Const) String 1.5

func (obj *Const) String() string

func (*Const) Type 1.5

func (obj *Const) Type() Type

Type はオブジェクトの型を返します。

func (*Const) Val 1.5

func (obj *Const) Val() constant.Value

Val は定数の値を返します。

type Error 1.5

Error (エラー) は型チェックエラーを表します。 error インターフェースを実装します。 "ソフト" エラーは,パッケージの有効な解釈を依然として許可するエラーです ("未使用の変数" など)。 "ハード" エラーは,無視した場合に予期しない動作を引き起こす可能性があります。

type Error struct {
    Fset *token.FileSet // Pos の解釈用のファイルセット
    Pos  token.Pos      // エラー位置
    Msg  string         // エラーメッセージ
    Soft bool           // 設定した場合,エラーは "ソフト" です。
}

func (Error) Error 1.5

func (err Error) Error() string

Error は,次の形式のエラー文字列を返します。 filename:line:column: message

type Func 1.5

Func は宣言された関数,具象メソッド,または抽象 (インターフェース) メソッドを表します。 その Type() は常に *Signature です。 抽象メソッドは埋め込みのために多くのインターフェースに属するかもしれません。

type Func struct {
    // エクスポートされていないフィールドがあります
}

func MissingMethod 1.5

func MissingMethod(V Type, T *Interface, static bool) (method *Func, wrongType bool)

MissingMethod は, V が T を実装している場合は (nil, false) を返します。 それ以外の場合は, T が必要とする missing メソッドを返します。

非インターフェース型 V の場合,または static が設定されている場合, T のすべてのメソッドが V に存在する場合, V は T を実装します。 それ以外の場合 (V はインターフェースで static は設定されません), MissingMethod は存在する T のメソッドだけをチェックします。 V 内の型は一致しています (たとえば,型宣言 x.(T) の場合, x はインターフェース型 V です) 。

func NewFunc 1.5

func NewFunc(pos token.Pos, pkg *Package, name string, sig *Signature) *Func

NewFunc は,関数の型を表す,与えられたシグネチャを持つ新しい関数を返します。

func (*Func) Exported 1.5

func (obj *Func) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Func) FullName 1.5

func (obj *Func) FullName() string

FullName は,パッケージまたはレシーバ型で修飾された関数またはメソッド obj の名前を返します。

func (*Func) Id 1.5

func (obj *Func) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Func) Name 1.5

func (obj *Func) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Func) Parent 1.5

func (obj *Func) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Func) Pkg 1.5

func (obj *Func) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Func) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Func) Scope 1.5

func (obj *Func) Scope() *Scope

Scope は,関数のボディブロックのスコープを返します。

func (*Func) String 1.5

func (obj *Func) String() string

func (*Func) Type 1.5

func (obj *Func) Type() Type

Type はオブジェクトの型を返します。

type ImportMode 1.6

ImportMode は将来の使用のために予約されています。

type ImportMode int

type Importer 1.5

Importer (インポーター) はパッケージへのインポートパスを解決します。

CAUTION: このインターフェースは,現地で販売されているパッケージのインポートをサポートしていません。 https://golang.org/s/go15vendor を参照してください。 可能であれば,外部の実装は ImporterFrom を実装するべきです。

type Importer interface {
    // Import は与えられたインポートパスに対してインポートされたパッケージを返す。
    // 意味は ImporterFrom.ImportFrom と似ていますが, dir と mode が無視される点が異なります (存在しないため) 。
    Import(path string) (*Package, error)
}

type ImporterFrom 1.6

ImporterFrom はパッケージへのインポートパスを解決します。 https://golang.org/s/go15vendor ごとにベンダーをサポートしています。 ImporterFrom 実装を取得するには, go/importer を使用してください。

type ImporterFrom interface {
    // インポーターは下位互換性のために存在します。
    // Import(path) を呼び出すことは ImportFrom(path, "", 0) を呼び出すことと同じです。
    // つまり,ローカルのベンダーパッケージが見つからない可能性があります。
    // ImporterFrom が存在する場合, types パッケージは Import を呼び出しません。
    Importer

    // ImportFrom は, dir にあるパッケージファイルによってインポートされたときに,指定されたインポートパスのインポート済みパッケージを返します。
    // インポートが失敗した場合,エラーが返されるほかに, ImportFrom はパッケージが作成されている場合は,キャッシュしてパッケージを返すことをお勧めします。
    // これにより,パッケージの欠落によるパッケージの不整合や後続の型チェッカーエラーが減少します。
    // モード値は 0 でなければなりません。
    // 将来の利用のために予約されています。
    // 同じパスとディレクトリを指定して ImportFrom を 2 回呼び出すと,同じパッケージが返されます。
    ImportFrom(path, dir string, mode ImportMode) (*Package, error)
}

type Info 1.5

Info は型チェックされたパッケージの結果型情報を保持しています。 map が渡されている情報だけが収集されます。 パッケージに型エラーがある場合,収集された情報は不完全な可能性があります。

type Info struct {
    // 型は式をその型に,また定数式の場合はその値にもマップします。
    // 無効な式は省略されています。
    //
    // 組み込み関数を示す (おそらく括弧で囲まれた) 識別子の場合,記録されたシグネチャは呼び出しサイト固有のものです。
    // 呼び出し結果が定数ではない場合,記録された型は引数固有のシグネチャです。
    // それ以外の場合,記録された型は無効です。
    //
    // Types マップはすべての識別子の型を記録するのではなく,任意の式が許可されているところに現れるものだけを記録します。
    // たとえば,セレクター式 xf 内の識別子 f は Selections マップ内にのみ存在し,変数宣言 'var z int' 内の識別子 z は Defs マップ内にのみ存在し,修飾識別子内のパッケージを示す識別子は次の場所に集められます。
    // マップを使用します。
    Types map[ast.Expr]TypeAndValue

    // Defs は,識別子をそれが定義するオブジェクトにマッピングします (パッケージ名,ドットインポートのドット ".",空白の "_" 識別子を含む) 。
    // オブジェクトを示さない識別子 (例えば,パッケージ節のパッケージ名,または型スイッチヘッダの t := x.(type) のシンボリック変数) の場合,対応するオブジェクトは nil です。
    //
    // 埋め込みフィールドの場合, Defs はそれが定義するフィールド *Var を返します。
    //
    // 不変式: Defs[id] == nil || Defs[id].Pos() == id.Pos()
    Defs map[*ast.Ident]Object

    // それらが示すオブジェクトへのマップ識別子を使用します。
    //
    // 埋め込みフィールドの場合, Uses はそれが表す *TypeName を返します。
    //
    // 不変式: Uses[id].Pos() != id.Pos()
    Uses map[*ast.Ident]Object

    // Implicits (暗黙的宣言) は,もしあれば,ノードを暗黙的に宣言されたオブジェクトにマップします。
    // 次のノードとオブジェクトの種類が表示されることがあります。
    //
    //     ノード               宣言オブジェクト
    //
    //     *ast.ImportSpec    *PkgName, 名前変更なしのインポート
    //     *ast.CaseClause    型固有の *Var, switch case 句 (default を含む)
    //     *ast.Field         無名パラメータ *Var (名前なし結果を含む)
    //
    Implicits map[ast.Node]Object

    // Selections はセレクター式 (限定識別子を除く) を対応するセレクションにマッピングします。
    Selections map[*ast.SelectorExpr]*Selection

    // Scopes は ast.Nodes を定義するスコープにマップします。
    // パッケージスコープは特定のノードに関連付けられているのではなく,パッケージに属するすべてのファイルに関連付けられています。
    // したがって,パッケージスコープは型チェックされた Package オブジェクトにあります。
    // スコープは, 1 つ以上のファイルスコープを含むパッケージスコープを囲む,ユニバーススコープが最も外側のスコープで,ステートメントスコープと関数リテラルスコープを囲む関数スコープを囲みます。
    // パッケージレベルの関数がパッケージスコープで宣言されていても,関数スコープは関数宣言を含むファイルのファイルスコープに埋め込まれています。
    //
    // 以下のノード型がスコープに表示されます。
    //
    //     *ast.File
    //     *ast.FuncType
    //     *ast.BlockStmt
    //     *ast.IfStmt
    //     *ast.SwitchStmt
    //     *ast.TypeSwitchStmt
    //     *ast.CaseClause
    //     *ast.CommClause
    //     *ast.ForStmt
    //     *ast.RangeStmt
    //
    Scopes map[ast.Node]*Scope

    // InitOrder は,パッケージレベルの初期化子を実行しなければならない順序でのリストです。
    // 初期化依存関係によって関連付けられた変数を参照する初期化子は,トポロジ順に表示され,その他はソース順に表示されます。
    // 初期化式のない変数はこのリストには現れません。
    InitOrder []*Initializer
}

ExampleInfo は,型チェッカーによって記録されたさまざまな事実を types.Info 構造体に出力します。 各構造体の定義と参照,およびパッケージ内のすべての式の型,値,およびモード。

コード:

// 1 つのソースファイルを解析します。
const input = `
package fib

type S string

var a, b, c = len(b), S(c), "hello"

func fib(x int) int {
    if x < 2 {
        return x
    }
    return fib(x-1) - fib(x-2)
}`
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "fib.go", input, 0)
if err != nil {
    log.Fatal(err)
}

// パッケージを型チェックします。
// 興味のある入力の種類ごとに空のマップを作成し,Check を実行してデータを設定します。
info := types.Info{
    Types: make(map[ast.Expr]types.TypeAndValue),
    Defs:  make(map[*ast.Ident]types.Object),
    Uses:  make(map[*ast.Ident]types.Object),
}
var conf types.Config
pkg, err := conf.Check("fib", fset, []*ast.File{f}, &info)
if err != nil {
    log.Fatal(err)
}

// パッケージレベルの変数を初期化順に表示します。
fmt.Printf("InitOrder: %v\n\n", info.InitOrder)

// 名前付きオブジェクトごとに,その定義とその用途の行と列を表示します。
fmt.Println("Defs and Uses of each named object:")
usesByObj := make(map[types.Object][]string)
for id, obj := range info.Uses {
    posn := fset.Position(id.Pos())
    lineCol := fmt.Sprintf("%d:%d", posn.Line, posn.Column)
    usesByObj[obj] = append(usesByObj[obj], lineCol)
}
var items []string
for obj, uses := range usesByObj {
    sort.Strings(uses)
    item := fmt.Sprintf("%s:\n  defined at %s\n  used at %s",
        types.ObjectString(obj, types.RelativeTo(pkg)),
        fset.Position(obj.Pos()),
        strings.Join(uses, ", "))
    items = append(items, item)
}
sort.Strings(items) // line:col で並べ替え (実質的に)
fmt.Println(strings.Join(items, "\n"))
fmt.Println()

fmt.Println("Types and Values of each expression:")
items = nil
for expr, tv := range info.Types {
    var buf bytes.Buffer
    posn := fset.Position(expr.Pos())
    tvstr := tv.Type.String()
    if tv.Value != nil {
        tvstr += " = " + tv.Value.String()
    }
    // line:col | expr | mode : type = value
    fmt.Fprintf(&buf, "%2d:%2d | %-19s | %-7s : %s",
        posn.Line, posn.Column, exprString(fset, expr),
        mode(tv), tvstr)
    items = append(items, buf.String())
}
sort.Strings(items)
fmt.Println(strings.Join(items, "\n"))

出力:

InitOrder: [c = "hello" b = S(c) a = len(b)]

Defs and Uses of each named object:
builtin len:
  defined at -
  used at 6:15
func fib(x int) int:
  defined at fib.go:8:6
  used at 12:20, 12:9
type S string:
  defined at fib.go:4:6
  used at 6:23
type int:
  defined at -
  used at 8:12, 8:17
type string:
  defined at -
  used at 4:8
var b S:
  defined at fib.go:6:8
  used at 6:19
var c string:
  defined at fib.go:6:11
  used at 6:25
var x int:
  defined at fib.go:8:10
  used at 10:10, 12:13, 12:24, 9:5

Types and Values of each expression:
 4: 8 | string              | type    : string
 6:15 | len                 | builtin : func(string) int
 6:15 | len(b)              | value   : int
 6:19 | b                   | var     : fib.S
 6:23 | S                   | type    : fib.S
 6:23 | S(c)                | value   : fib.S
 6:25 | c                   | var     : string
 6:29 | "hello"             | value   : string = "hello"
 8:12 | int                 | type    : int
 8:17 | int                 | type    : int
 9: 5 | x                   | var     : int
 9: 5 | x < 2               | value   : untyped bool
 9: 9 | 2                   | value   : int = 2
10:10 | x                   | var     : int
12: 9 | fib                 | value   : func(x int) int
12: 9 | fib(x - 1)          | value   : int
12: 9 | fib(x-1) - fib(x-2) | value   : int
12:13 | x                   | var     : int
12:13 | x - 1               | value   : int
12:15 | 1                   | value   : int = 1
12:20 | fib                 | value   : func(x int) int
12:20 | fib(x - 2)          | value   : int
12:24 | x                   | var     : int
12:24 | x - 2               | value   : int
12:26 | 2                   | value   : int = 2

func (*Info) ObjectOf 1.5

func (info *Info) ObjectOf(id *ast.Ident) Object

ObjectOf は指定された id で示されるオブジェクトを返します。 見つからなかった場合は nil を返します。

id が埋め込み構造体フィールドの場合, ObjectOf は,使用する型 (*TypeName) ではなく,定義したフィールド (*Var) を返します。

前提条件: Uses と Defs マップが設定されていること。

func (*Info) TypeOf 1.5

func (info *Info) TypeOf(e ast.Expr) Type

TypeOf は式 e の型を返します。 見つからなかった場合は nil を返します。 前提条件: Types, Uses, Defs マップにデータが設定されていること。

type Initializer 1.5

Initializer は,パッケージレベルの変数,または多値の初期化式の場合は変数のリスト,および対応する初期化式を記述します。

type Initializer struct {
    Lhs []*Var // var Lhs = Rhs
    Rhs ast.Expr
}

func (*Initializer) String 1.5

func (init *Initializer) String() string

type Interface 1.5

Interface はインターフェースの種類を表します。

type Interface struct {
    // エクスポートされていないフィールドがあります
}

func NewInterface 1.5

func NewInterface(methods []*Func, embeddeds []*Named) *Interface

NewInterface は与えられたメソッドと埋め込み型のための新しい (不完全な) インターフェースを返します。 各埋め込み型は,内部の型のインターフェース型を持つ必要があります。 NewInterface は渡されたメソッドの所有権を取得し,見つからない受信者を設定することでそれらの型を変更することができます。 インターフェースのメソッドセットを計算するには, Complete を呼び出す必要があります。

非推奨: 代わりに NewInterfaceType を使用して, (定義されていない) インターフェース型を埋め込むことができます。 これは,定義されていない (リテラル) インターフェース型を参照するエイリアス型名を埋め込むインターフェースに必要です。

func NewInterfaceType 1.11

func NewInterfaceType(methods []*Func, embeddeds []Type) *Interface

NewInterfaceType は,指定されたメソッドと埋め込み型の新しい (不完全な) インターフェースを返します。 各埋め込み型は基本型のインターフェース型を持つ必要があります (このプロパティは定義された型に対して検証されません。 これは設定中であり,有効な基本型はまだありません) 。 NewInterfaceType は渡されたメソッドの所有権を取得し,見つからない受信者を設定することによってそれらの型を変更することができます。 インターフェースのメソッドセットを計算するには, Complete を呼び出す必要があります。

func (*Interface) Complete 1.5

func (t *Interface) Complete() *Interface

Complete はインターフェースのメソッドセットを計算します。 NewInterfaceType と NewInterface のユーザーは,インターフェースの埋め込み型が完全に定義された後で,他の型を形成する以外の方法でインターフェース型を使用する前に呼び出す必要があります。 Complete はレシーバを返します。

func (*Interface) Embedded 1.5

func (t *Interface) Embedded(i int) *Named

Embedded は, 0 <= i < t.NumEmbeddeds() の場合, i 番目の埋め込み定義 (*Named) 型のインターフェース t を返します。 i 番目の埋め込み型が定義済み型ではない場合,結果は nil です。

非推奨: 定義済み (*Named) 型に制限されていない EmbeddedType を使用してください。

func (*Interface) EmbeddedType 1.11

func (t *Interface) EmbeddedType(i int) Type

EmbeddedType は, 0 <= i < t.NumEmbeddeds() の場合, i 番目の埋め込み型のインターフェース t を返します。

func (*Interface) Empty 1.5

func (t *Interface) Empty() bool

Empty は, t が空のインターフェースであるかどうかを報告します。

func (*Interface) ExplicitMethod 1.5

func (t *Interface) ExplicitMethod(i int) *Func

ExplicitMethod は, 0 <= i < t.NumExplicitMethods() に対して, i 番目に明示的に宣言されたインターフェース t のメソッドを返します。 メソッドは,それらの一意の ID によって順序付けられています。

func (*Interface) Method 1.5

func (t *Interface) Method(i int) *Func

メソッドは, 0 <= i < t.NumMethods() に対して,インターフェース t の i 番目のメソッドを返します。 メソッドは,それらの一意の ID によって順序付けられています。

func (*Interface) NumEmbeddeds 1.5

func (t *Interface) NumEmbeddeds() int

NumEmbeddeds はインターフェース t に埋め込まれた型の数を返します。

func (*Interface) NumExplicitMethods 1.5

func (t *Interface) NumExplicitMethods() int

NumExplicitMethods は,インターフェース t の明示的に宣言されたメソッドの数を返します。

func (*Interface) NumMethods 1.5

func (t *Interface) NumMethods() int

NumMethods は,インターフェース t のメソッドの総数を返します。

func (*Interface) String 1.5

func (t *Interface) String() string

func (*Interface) Underlying 1.5

func (t *Interface) Underlying() Type

type Label 1.5

Label は宣言されたラベルを表します。 ラベルには型がありません。

type Label struct {
    // エクスポートされていないフィールドがあります
}

func NewLabel 1.5

func NewLabel(pos token.Pos, pkg *Package, name string) *Label

NewLabel は新しいラベルを返します。

func (*Label) Exported 1.5

func (obj *Label) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Label) Id 1.5

func (obj *Label) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Label) Name 1.5

func (obj *Label) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Label) Parent 1.5

func (obj *Label) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Label) Pkg 1.5

func (obj *Label) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Label) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Label) String 1.5

func (obj *Label) String() string

func (*Label) Type 1.5

func (obj *Label) Type() Type

Type はオブジェクトの型を返します。

type Map 1.5

Map はマップ型を表します。

type Map struct {
    // エクスポートされていないフィールドがあります
}

func NewMap 1.5

func NewMap(key, elem Type) *Map

NewMap は与えられたキーと要素型の新しいマップを返します。

func (*Map) Elem 1.5

func (m *Map) Elem() Type

Elem はマップ m の要素型を返します。

func (*Map) Key 1.5

func (m *Map) Key() Type

Key はマップ m のキー型を返します。

func (*Map) String 1.5

func (m *Map) String() string

func (*Map) Underlying 1.5

func (m *Map) Underlying() Type

type MethodSet 1.5

MethodSet は,具象メソッドまたは抽象メソッド (インターフェース) の順序付きセットです。 メソッドは MethodVal 選択であり,それらは m.Obj().Id() の昇順で並べられています。 MethodSet のゼロ値は,すぐに使える空のメソッドセットです。

type MethodSet struct {
    // エクスポートされていないフィールドがあります
}

ExampleMethodSet はさまざまな型のメソッドセットを出力します。

コード:

// 1 つのソースファイルを解析します。
const input = `
package temperature
import "fmt"
type Celsius float64
func (c Celsius) String() string  { return fmt.Sprintf("%g°C", c) }
func (c *Celsius) SetF(f float64) { *c = Celsius(f - 32 / 9 * 5) }
`
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "celsius.go", input, 0)
if err != nil {
    log.Fatal(err)
}

// このファイルからなるパッケージを型チェックします。
// インポートされたパッケージの型情報は $GOROOT/pkg/$GOOS_$GOOARCH/fmt.a から来ています。
conf := types.Config{Importer: importer.Default()}
pkg, err := conf.Check("temperature", fset, []*ast.File{f}, nil)
if err != nil {
    log.Fatal(err)
}

// Celsius と *Celsius のメソッドセットを表示します。
celsius := pkg.Scope().Lookup("Celsius").Type()
for _, t := range []types.Type{celsius, types.NewPointer(celsius)} {
    fmt.Printf("Method set of %s:\n", t)
    mset := types.NewMethodSet(t)
    for i := 0; i < mset.Len(); i++ {
        fmt.Println(mset.At(i))
    }
    fmt.Println()
}

出力:

Method set of temperature.Celsius:
method (temperature.Celsius) String() string

Method set of *temperature.Celsius:
method (*temperature.Celsius) SetF(f float64)
method (*temperature.Celsius) String() string

func NewMethodSet 1.5

func NewMethodSet(T Type) *MethodSet

NewMethodSet は,与えられた型 T のメソッドセットを返します。 空の場合でも,常に nil 以外のメソッドセットを返します。

func (*MethodSet) At 1.5

func (s *MethodSet) At(i int) *Selection

At は, 0 <= i < s.Len() に対して, s 内の i 番目のメソッドを返します。

func (*MethodSet) Len 1.5

func (s *MethodSet) Len() int

Len はメソッド s の数を返します。

func (*MethodSet) Lookup 1.5

func (s *MethodSet) Lookup(pkg *Package, name string) *Selection

Lookup は一致するパッケージと名前でメソッドを返します。 見つからなかった場合は nil を返します。

func (*MethodSet) String 1.5

func (s *MethodSet) String() string

type Named 1.5

Named は名前付き型を表します。

type Named struct {
    // エクスポートされていないフィールドがあります
}

func NewNamed 1.5

func NewNamed(obj *TypeName, underlying Type, methods []*Func) *Named

NewNamed は,指定された型名,内部の型,および関連付けられたメソッドに対して新しい名前付き型を返します。 与えられた型名 obj がまだ型を持っていない場合,その型は返された名前付き型に設定されます。 基本型は *Named であってはいけません。

func (*Named) AddMethod 1.5

func (t *Named) AddMethod(m *Func)

メソッド m にメソッド m が既に追加されていない限り, AddMethod はメソッド m を追加します。

func (*Named) Method 1.5

func (t *Named) Method(i int) *Func

Method は 0 <= i < t.NumMethods() に対して名前付き型 t の i 番目のメソッドを返す。

func (*Named) NumMethods 1.5

func (t *Named) NumMethods() int

NumMethods は,レシーバの名前が型 t である明示的メソッドの数を返します。

func (*Named) Obj 1.5

func (t *Named) Obj() *TypeName

Obj は,名前付き型 t の型名を返します。

func (*Named) SetUnderlying 1.5

func (t *Named) SetUnderlying(underlying Type)

SetUnderlying は内部の型を設定し, t を complete とマークします。

func (*Named) String 1.5

func (t *Named) String() string

func (*Named) Underlying 1.5

func (t *Named) Underlying() Type

type Nil 1.5

Nil は事前宣言された値 nil を表します。

type Nil struct {
    // エクスポートされていないフィールドがあります
}

func (*Nil) Exported 1.5

func (obj *Nil) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Nil) Id 1.5

func (obj *Nil) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Nil) Name 1.5

func (obj *Nil) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Nil) Parent 1.5

func (obj *Nil) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Nil) Pkg 1.5

func (obj *Nil) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Nil) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Nil) String 1.5

func (obj *Nil) String() string

func (*Nil) Type 1.5

func (obj *Nil) Type() Type

Type はオブジェクトの型を返します。

type Object 1.5

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

type Object interface {
    Parent() *Scope // このオブジェクトが宣言されている範囲。 メソッドと構造体フィールドは nil
    Pos() token.Pos // 宣言内のオブジェクト識別子の位置
    Pkg() *Package  // このオブジェクトが属するパッケージ。 ユニバーススコープ内のラベルおよびオブジェクトの場合は nil
    Name() string   // パッケージローカルオブジェクト名
    Type() Type     // オブジェクト型
    Exported() bool // 名前が大文字で始まるかどうかを報告します
    Id() string     // エクスポートされている場合はオブジェクト名,エクスポートされていない場合は修飾名 (func Id を参照)

    // String は,人間が読める形式のオブジェクトの文字列を返します。
    String() string
    // contains filtered or unexported methods
}

func LookupFieldOrMethod 1.5

func LookupFieldOrMethod(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)

LookupFieldOrMethod は, T で指定されたパッケージと名前を使用してフィールドまたはメソッドを検索し,対応する *Var または *Func ,インデックスシーケンス,およびフィールドまたはメソッドへのパスにポインター間接参照があったかどうかを示すブール値を返します。 addressable が設定されている場合, T はアドレス可能な変数の型です (メソッドの検索にのみ関係します) 。

最後のインデックスエントリは,エントリが見つかった (埋め込まれている可能性がある) 型のフィールドまたはメソッドインデックスです。

1) 名前付き型の宣言されたメソッドのリスト。または
2) インターフェース型のすべてのメソッド (メソッドセット) のリスト。または
3) 構造体型のフィールドのリスト。

以前のインデックスエントリは,見つかったエントリに到達するためにトラバースした深さ 0 から始まる埋め込み構造体フィールドのインデックスです。

エントリが見つからない場合は, nil オブジェクトが返されます。 この場合,返されるインデックスと間接値は次のような意味を持ちます。

	- index != nil の場合,インデックスシーケンスはあいまいなエントリを指します
	(同じ名前が同じ埋め込みレベルで複数回出現します) 。

	- indirect が設定されている場合は,ポインタレシーバ型のメソッドが見つかりました。
     しかし,実際のレシーバ型からメソッドの正式なレシーバ基本型へのパス上にポインタがなく,
	レシーバは addressable でもありませんでした。

type Package 1.5

パッケージは Go パッケージを表します。

type Package struct {
    // エクスポートされていないフィールドがあります
}

Unsafe パッケージは,インポートパス "unsafe" に対してインポーターから返されたパッケージです。

var Unsafe *Package

func NewPackage 1.5

func NewPackage(path, name string) *Package

NewPackage は,指定されたパッケージパスと名前に対して新しいパッケージを返します。 パッケージは完全ではなく,明示的なインポートも含まれていません。

func (*Package) Complete 1.5

func (pkg *Package) Complete() bool

パッケージのスコープに (少なくとも) すべてのエクスポートされたオブジェクトが含まれていれば,パッケージは完了です。 それ以外の場合は未完了です。

func (*Package) Imports 1.5

func (pkg *Package) Imports() []*Package

Imports は, pkg によって直接インポートされたパッケージのリストを返します。 リストはソース順です。

pkg がエクスポートデータからロードされた場合, Imports は pkg によって参照されるパッケージレベルのオブジェクトを提供するパッケージを含みます。 これは, pkg のソースコードによって直接インポートされた一連のパッケージよりも多い場合も少ない場合もあります。

func (*Package) MarkComplete 1.5

func (pkg *Package) MarkComplete()

MarkComplete は,パッケージに完了のマークを付けます。

func (*Package) Name 1.5

func (pkg *Package) Name() string

Name はパッケージ名を返します。

func (*Package) Path 1.5

func (pkg *Package) Path() string

Path はパッケージパスを返します。

func (*Package) Scope 1.5

func (pkg *Package) Scope() *Scope

Scope は,パッケージレベル (TypeNames , Consts , Vars ,および Func) で宣言されたオブジェクトを保持する (完全または不完全な) パッケージスコープを返します。

func (*Package) SetImports 1.5

func (pkg *Package) SetImports(list []*Package)

SetImports は明示的にインポートされたパッケージのリストを list に設定します。 リスト要素が一意であることを確認するのは呼び出し側の責任です。

func (*Package) SetName 1.6

func (pkg *Package) SetName(name string)

SetName はパッケージ名を設定します。

func (*Package) String 1.5

func (pkg *Package) String() string

type PkgName 1.5

PkgName はインポートされた Go パッケージを表します。 PkgName には型がありません。

type PkgName struct {
    // エクスポートされていないフィールドがあります
}

func NewPkgName 1.5

func NewPkgName(pos token.Pos, pkg *Package, name string, imported *Package) *PkgName

NewPkgName は,インポートされたパッケージを表す新しい PkgName オブジェクトを返します。 残りの引数は,すべてのオブジェクトで見つかった属性を設定します。

func (*PkgName) Exported 1.5

func (obj *PkgName) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*PkgName) Id 1.5

func (obj *PkgName) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*PkgName) Imported 1.5

func (obj *PkgName) Imported() *Package

Imported はインポートされたパッケージを返します。 import ステートメントを含むパッケージである Pkg() とは異なります。

func (*PkgName) Name 1.5

func (obj *PkgName) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*PkgName) Parent 1.5

func (obj *PkgName) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*PkgName) Pkg 1.5

func (obj *PkgName) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*PkgName) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*PkgName) String 1.5

func (obj *PkgName) String() string

func (*PkgName) Type 1.5

func (obj *PkgName) Type() Type

Type はオブジェクトの型を返します。

type Pointer 1.5

Pointer はポインタ型を表します。

type Pointer struct {
    // エクスポートされていないフィールドがあります
}

func NewPointer 1.5

func NewPointer(elem Type) *Pointer

NewPointer は与えられた要素 (ベース) 型の新しいポインタ型を返します。

func (*Pointer) Elem 1.5

func (p *Pointer) Elem() Type

Elem は与えられたポインタ p の要素型を返します。

func (*Pointer) String 1.5

func (p *Pointer) String() string

func (*Pointer) Underlying 1.5

func (p *Pointer) Underlying() Type

type Qualifier 1.5

Qualifier は, TypeString, ObjectString ,および SelectionString の呼び出しで名前付きパッケージレベルオブジェクトをどのように表示するかを制御します。

これら 3 つのフォーマット化ルーチンは,パッケージレベルのオブジェクト O ごとに修飾子を呼び出します。 修飾子が空でない文字列 p を返す場合,オブジェクトは p.O の形式で出力されます。 空の文字列が返された場合は,オブジェクト名 O のみが表示されます。

nil 修飾子を使用することは, (*Package).Path を使用することと同じです。 オブジェクトはインポートパスによって修飾されます (例 : "encoding/json.Marshal") 。

type Qualifier func(*Package) string

func RelativeTo 1.5

func RelativeTo(pkg *Package) Qualifier

RelativeTo は, pkg 以外のすべてのパッケージのメンバーを完全修飾する Qualifier を返します。

type Scope 1.5

Scope (スコープ) は,一連のオブジェクトを管理し,その包含 (親) スコープと包含 (子) スコープにリンクします。 オブジェクトを挿入して名前で調べることができます。 Scope のゼロ値は,すぐに使える空のスコープです。

type Scope struct {
    // エクスポートされていないフィールドがあります
}

Universe スコープには, Go のすべての事前宣言済みオブジェクトが含まれています。 これは,一連のネストされたスコープの最も外側のスコープです。

var Universe *Scope

ExampleScope は,一連の解析済みファイルから作成されたパッケージのスコープのツリーを表示します。

コード:

// パッケージのソースファイルを解析します。
fset := token.NewFileSet()
var files []*ast.File
for _, file := range []struct{ name, input string }{
    {"main.go", `
package main
import "fmt"
func main() {
    freezing := FToC(-18)
    fmt.Println(freezing, Boiling) }
`},
    {"celsius.go", `
package main
import "fmt"
type Celsius float64
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }
func FToC(f float64) Celsius { return Celsius(f - 32 / 9 * 5) }
const Boiling Celsius = 100
func Unused() { {}; {{ var x int; _ = x }} } // 空のブロックスコープが表示されることを確認します。
`},
} {
    f, err := parser.ParseFile(fset, file.name, file.input, 0)
    if err != nil {
        log.Fatal(err)
    }
    files = append(files, f)
}

// これらのファイルからなるパッケージを型チェックします。
// インポートされた "fmt" パッケージの型情報は $GOROOT/pkg/$GOOS_$GOOARCH/fmt.a から来ています。
conf := types.Config{Importer: importer.Default()}
pkg, err := conf.Check("temperature", fset, files, nil)
if err != nil {
    log.Fatal(err)
}

// スコープのツリーを表示します。
// 決定的にするために,アドレスを修正します。
var buf bytes.Buffer
pkg.Scope().WriteTo(&buf, 0, true)
rx := regexp.MustCompile(` 0x[a-fA-F0-9]*`)
fmt.Println(rx.ReplaceAllString(buf.String(), ""))

出力:

package "temperature" scope {
.  const temperature.Boiling temperature.Celsius
.  type temperature.Celsius float64
.  func temperature.FToC(f float64) temperature.Celsius
.  func temperature.Unused()
.  func temperature.main()
.  main.go scope {
.  .  package fmt
.  .  function scope {
.  .  .  var freezing temperature.Celsius
.  .  }
.  }
.  celsius.go scope {
.  .  package fmt
.  .  function scope {
.  .  .  var c temperature.Celsius
.  .  }
.  .  function scope {
.  .  .  var f float64
.  .  }
.  .  function scope {
.  .  .  block scope {
.  .  .  }
.  .  .  block scope {
.  .  .  .  block scope {
.  .  .  .  .  var x int
.  .  .  .  }
.  .  .  }
.  .  }
.  }
}

func NewScope 1.5

func NewScope(parent *Scope, pos, end token.Pos, comment string) *Scope

NewScope は,指定された親スコープに含まれる新しい空のスコープがあればそれを返します。 コメントはデバッグ専用です。

func (*Scope) Child 1.5

func (s *Scope) Child(i int) *Scope

Child は, 0 <= i < NumChildren() の場合, i 番目の子スコープを返します。

func (*Scope) Contains 1.5

func (s *Scope) Contains(pos token.Pos) bool

Contains は,pos がスコープの範囲内かどうかを報告します。 型チェックされた AST に完全な位置情報がある場合にのみ,結果が有効であることが保証されています。

func (*Scope) End 1.5

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

func (*Scope) Innermost 1.5

func (s *Scope) Innermost(pos token.Pos) *Scope

Innermost は, pos を含む最も内側の (子) スコープを返します。 pos がどの範囲にも含まれていない場合,結果は nil です。 結果はユニバーススコープでもゼロです。 型チェックされた AST に完全な位置情報がある場合にのみ,結果が有効であることが保証されています。

func (*Scope) Insert 1.5

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

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

func (*Scope) Len 1.5

func (s *Scope) Len() int

Len はスコープ要素の数を返します。

func (*Scope) Lookup 1.5

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

Lookup は,与えられた名前のスコープ s 内のオブジェクトを返します。 存在しなければ,結果は nil です。

func (*Scope) LookupParent 1.5

func (s *Scope) LookupParent(name string, pos token.Pos) (*Scope, Object)

LookupParent は, Lookup(name) が nil 以外のオブジェクトを返すスコープを見つけるまで, s で始まるスコープの親チェーンをたどり,そのスコープとオブジェクトを返します。 有効な位置 pos が指定されている場合は, pos 以前に宣言されたオブジェクトのみが考慮されます。 そのようなスコープとオブジェクトが存在しない場合,結果は (nil, nil) です。

オブジェクトがスコープに挿入され,その時点ですでに親を持っている場合, obj.Parent() は返されるスコープとは異なる可能性があることに注意してください (下記の Insert を参照) 。 これは,そのスコープがそれらをエクスポートしたパッケージのスコープであるドットインポートオブジェクトに対してのみ発生する可能性があります。

func (*Scope) Names 1.5

func (s *Scope) Names() []string

Names はスコープの要素名をソート順に返します。

func (*Scope) NumChildren 1.5

func (s *Scope) NumChildren() int

NumChildren は, s にネストされているスコープの数を返します。

func (*Scope) Parent 1.5

func (s *Scope) Parent() *Scope

Parent は,スコープの包含 (親) スコープを返します。

func (*Scope) Pos 1.5

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

Pos と End は,スコープのソースコードの範囲 [pos, end) を表します。 型チェックされた AST に完全な位置情報がある場合にのみ,結果が有効であることが保証されています。 範囲は,ユニバーススコープとパッケージスコープでは未定義です。

func (*Scope) String 1.5

func (s *Scope) String() string

String は,デバッグのためにスコープの文字列表現を返します。

func (*Scope) WriteTo 1.5

func (s *Scope) WriteTo(w io.Writer, n int, recurse bool)

WriteTo はスコープの文字列表現を w に書き込みます。 スコープの要素は名前でソートされています。 字下げのレベルは n >= 0 によって制御され,字下げがない場合は n == 0 になります。 recurse が設定されている場合は,ネストされた (子) スコープも書き込みます。

type Selection 1.5

Selection はセレクター式 x.f を表します。 宣言のために :

type T struct{ x int; E }
type E struct{}
func (e E) m() {}
var p *T

以下の関係があります。

Selector    Kind          Recv    Obj    Type               Index     Indirect

p.x         FieldVal      T       x      int                {0}       true
p.m         MethodVal     *T      m      func (e *T) m()    {1, 0}    true
T.m         MethodExpr    T       m      func m(_ T)        {1, 0}    false
type Selection struct {
    // エクスポートされていないフィールドがあります
}

func (*Selection) Index 1.5

func (s *Selection) Index() []int

インデックスは x.f の x から f へのパスを表します。 最後のインデックスエントリは, f を宣言する型のフィールドインデックスまたはメソッドインデックスです。 どちらか :

1) 名前付き型の宣言されたメソッドのリスト。または
2) インターフェース型のメソッドのリスト。または
3) 構造体型のフィールドのリスト。

早いインデックスエントリは,埋め込み深さ 0 から始めて, x (の型) から f へたどりつくために暗黙的にトラバースした埋め込みフィールドのインデックスです。

func (*Selection) Indirect 1.5

func (s *Selection) Indirect() bool

Indirect は,x.f の x から f への移動にポインターの間接参照が必要かどうかを報告します。

func (*Selection) Kind 1.5

func (s *Selection) Kind() SelectionKind

種類は選択の種類を返します。

func (*Selection) Obj 1.5

func (s *Selection) Obj() Object

Obj は x.f で示されるオブジェクトを返します。 フィールド選択の場合は *Var ,それ以外の場合は *Func 。

func (*Selection) Recv 1.5

func (s *Selection) Recv() Type

Recv は x.f に x の型を返します。

func (*Selection) String 1.5

func (s *Selection) String() string

func (*Selection) Type 1.5

func (s *Selection) Type() Type

Type は x.f の型を返します。 これは f の型とは異なる場合があります。 詳しくは選択を参照してください。

type SelectionKind 1.5

SelectionKind は,セレクター式 x.f の種類を表します (修飾識別子を除く) 。

type SelectionKind int
const (
    FieldVal   SelectionKind = iota // x.f は構造体フィールドセレクタです
    MethodVal                       // x.f はメソッドセレクタです
    MethodExpr                      // x.f はメソッド式です
)

type Signature 1.5

Signature は, (非組み込みの) 関数またはメソッドの種類を表します。 識別のために署名を比較するとき,受信者は無視されます。

type Signature struct {
    // エクスポートされていないフィールドがあります
}

func NewSignature 1.5

func NewSignature(recv *Var, params, results *Tuple, variadic bool) *Signature

NewSignature は,与えられた受信者,パラメータ,および結果に対して新しい関数型を返します。 どちらも nil です。 可変長が設定されている場合,関数は可変長であり,少なくとも 1 つのパラメータを持ち,最後のパラメータは名前のないスライス型でなければなりません。

func (*Signature) Params 1.5

func (s *Signature) Params() *Tuple

Params はシグニチャ s のパラメータ,または nil を返します。

func (*Signature) Recv 1.5

func (s *Signature) Recv() *Var

Recv はシグネチャ s の受信者 (メソッドの場合) を返します。 関数の場合は nil を返します。 識別のためにシグニチャを比較するときそれは無視されます。

抽象メソッドの場合, Recv は囲んでいるインターフェースを *Named インターフェースまたは *Interface として返します。 埋め込みにより,インターフェースにはレシーバ型が異なるインターフェースであるメソッドが含まれることがあります。

func (*Signature) Results 1.5

func (s *Signature) Results() *Tuple

Result は,シグニチャ s の結果,または nil を返します。

func (*Signature) String 1.5

func (s *Signature) String() string

func (*Signature) Underlying 1.5

func (s *Signature) Underlying() Type

func (*Signature) Variadic 1.5

func (s *Signature) Variadic() bool

Variadic は,シグネチャ s が可変長であるかどうかを報告します。

type Sizes 1.5

Sizes は,安全でないパッケージのサイジング機能を定義します。

type Sizes interface {
    // Alignof は, T 型の変数の配置を返します。
    // Alignof は,仕様でリクエストされている配置保証を実装する必要があります。
    Alignof(T Type) int64

    // Offsetsof は,与えられた構造体フィールドのオフセットをバイト単位で返します。
    // Offsetsof は,仕様でリクエストされているオフセット保証を実装する必要があります。
    Offsetsof(fields []*Var) []int64

    // Sizeof は, T 型の変数のサイズを返します。
    // Sizeof は,仕様でリクエストされるサイズ保証を実装する必要があります。
    Sizeof(T Type) int64
}

func SizesFor 1.9

func SizesFor(compiler, arch string) Sizes

SizesFor は,アーキテクチャー用のコンパイラーによって使用されるサイズを返します。 コンパイラ / アーキテクチャの組み合わせがわからない場合,結果は nil です。

コンパイラ "gc" のサポートアーキテクチャ: "386", "arm", "arm64", "amd64", "amd64p32", "mips", "mipsle", "mips64", "mips64le", "ppc64", "ppc64le", "riscv64", "s390x", "sparc64", "wasm".

type Slice 1.5

Slice はスライス型を表します。

type Slice struct {
    // エクスポートされていないフィールドがあります
}

func NewSlice 1.5

func NewSlice(elem Type) *Slice

NewSlice は与えられた要素型の新しいスライス型を返します。

func (*Slice) Elem 1.5

func (s *Slice) Elem() Type

Elem はスライス s の要素型を返します。

func (*Slice) String 1.5

func (s *Slice) String() string

func (*Slice) Underlying 1.5

func (s *Slice) Underlying() Type

type StdSizes 1.5

StdSizes は,よく使われる Sizes を作成するための便利な型です。 以下の単純化した仮定をしています:

	- 明示サイズの基本型 (int16 など) のサイズは,指定されたサイズです。
	- 文字列とインターフェースのサイズは 2*WordSize です。
	- スライスのサイズは 3*WordSize です。
	- n 個の要素の配列のサイズは,配列の要素型の n 個の連続したフィールドの構造体のサイズに対応します。
     - 構造体のサイズは,最後のフィールドのオフセットにそのフィールドのサイズを加えたものです。
	  すべての要素型と同様に,構造体が配列内で使用される場合,そのサイズは最初に構造体の配置の倍数に配置される必要があります。
	- 他のすべての型のサイズは WordSize です。
	- 配列と構造体は仕様定義ごとに整列されます。
	  他のすべての型は,最大整列 MaxAlign で自然に整列されます。

*StdSizes は Sizes を実装します。

type StdSizes struct {
    WordSize int64 // バイト単位のワードサイズ - 4 以上 (32 ビット) でなければなりません
    MaxAlign int64 // バイト単位の最大アライメント - >=1 でなければならない
}

func (*StdSizes) Alignof 1.5

func (s *StdSizes) Alignof(T Type) int64

func (*StdSizes) Offsetsof 1.5

func (s *StdSizes) Offsetsof(fields []*Var) []int64

func (*StdSizes) Sizeof 1.5

func (s *StdSizes) Sizeof(T Type) int64

type Struct 1.5

Struct は構造体型を表します。

type Struct struct {
    // エクスポートされていないフィールドがあります
}

func NewStruct 1.5

func NewStruct(fields []*Var, tags []string) *Struct

NewStruct は,与えられたフィールドと対応するフィールドタグを持つ新しい構造体を返します。 インデックスが i のフィールドにタグがある場合, tags[i] はそのタグでなければなりませんが, len(tags) は最大のインデックスが i のタグを保持するのに必要な長さだけです。 したがって,どのフィールドにもタグがない場合,タグはゼロになる可能性があります。

func (*Struct) Field 1.5

func (s *Struct) Field(i int) *Var

Field は, 0 <= i < NumFields() の場合, i 番目のフィールドを返します。

func (*Struct) NumFields 1.5

func (s *Struct) NumFields() int

NumFields は,構造体内のフィールド数 (空白フィールドと埋め込みフィールドを含む) を返します。

func (*Struct) String 1.5

func (s *Struct) String() string

func (*Struct) Tag 1.5

func (s *Struct) Tag(i int) string

Tag は 0 <= i < NumFields() の i 番目のフィールドタグを返します。

func (*Struct) Underlying 1.5

func (s *Struct) Underlying() Type

type Tuple 1.5

Tuple は変数の順序付きリストを表します。 nil *Tuple は有効な (空の) タプルです。 タプルは,シグネチャの構成要素として,および複数割り当ての型を表すために使用されます。 それらは Go の第一級の型ではありません。

type Tuple struct {
    // エクスポートされていないフィールドがあります
}

func NewTuple 1.5

func NewTuple(x ...*Var) *Tuple

NewTuple は与えられた変数の新しいタプルを返します。

func (*Tuple) At 1.5

func (t *Tuple) At(i int) *Var

At はタプル t の i 番目の変数を返します。

func (*Tuple) Len 1.5

func (t *Tuple) Len() int

Len はタプル t の数変数を返します。

func (*Tuple) String 1.5

func (t *Tuple) String() string

func (*Tuple) Underlying 1.5

func (t *Tuple) Underlying() Type

type Type 1.5

Type は Go の種類を表します。 すべての型は Type インターフェースを実装します。

type Type interface {
    // Underlying は,内部の型を返します。
    Underlying() Type

    // String は型の文字列表現を返します。
    String() string
}

func Default 1.8

func Default(typ Type) Type

Default は, " 型なし " 型のデフォルトの " 型付き " 型を返します。 他のすべての型の着信型を返します。 untyped nil のデフォルトの型は untyped nil です。

type TypeAndValue 1.5

TypeAndValue は,対応する式の型と値 (定数の場合) を報告します。

type TypeAndValue struct {
    Type  Type
    Value constant.Value
    // エクスポートされていないフィールドがあります
}

func Eval 1.5

func Eval(fset *token.FileSet, pkg *Package, pos token.Pos, expr string) (_ TypeAndValue, err error)

Eval は型を返し,もし定数なら式 expr の値をパッケージ pkg の位置 pos で評価されます。 これは渡されたファイルセットに相対的な完全な位置情報を持つ AST の型チェックから派生したものでなければなりません。

パラメーター fset, pkg, および pos の意味は, CheckExpr と同じです。 expr を正常に解析できない場合,または結果の expr AST を型チェックできない場合,エラーが返されます。

func (TypeAndValue) Addressable 1.5

func (tv TypeAndValue) Addressable() bool

Addressable は,対応する式がアドレス可能かどうかを報告します (https://golang.org/ref/spec#Address_operators) 。

func (TypeAndValue) Assignable 1.5

func (tv TypeAndValue) Assignable() bool

Assignable は,対応する式が割り当て可能かどうかを報告します (正しい型の値が渡された場合) 。

func (TypeAndValue) HasOk 1.5

func (tv TypeAndValue) HasOk() bool

HasOk は,対応する式がカンマ OK 代入の rhs に使用できるかどうかを報告します。

func (TypeAndValue) IsBuiltin 1.5

func (tv TypeAndValue) IsBuiltin() bool

IsBuiltin は,対応する式が (おそらく括弧で囲まれた) 組み込み関数を表しているかどうかを報告します。

func (TypeAndValue) IsNil 1.5

func (tv TypeAndValue) IsNil() bool

IsNil は,対応する式が事前宣言された値 nil を表すかどうかを報告します。

func (TypeAndValue) IsType 1.5

func (tv TypeAndValue) IsType() bool

IsType は,対応する式が型を指定しているかどうかを報告します。

func (TypeAndValue) IsValue 1.5

func (tv TypeAndValue) IsValue() bool

IsValue は,対応する式が値かどうかを報告します。 組み込みは値とは見なされません。 定数値には nil 以外の値があります。

func (TypeAndValue) IsVoid 1.5

func (tv TypeAndValue) IsVoid() bool

IsVoid は,対応する式が結果のない関数呼び出しであるかどうかを報告します。

type TypeName 1.5

TypeName は, (定義型または別名) 型の名前を表します。

type TypeName struct {
    // エクスポートされていないフィールドがあります
}

func NewTypeName 1.5

func NewTypeName(pos token.Pos, pkg *Package, name string, typ Type) *TypeName

NewTypeName は与えられた型を表す新しい型名を返します。 残りの引数は,すべてのオブジェクトで見つかった属性を設定します。

typ 引数は,定義済み (名前付き) 型または別名型のいずれかです。 返された TypeName を NewNamed の引数として使うことができるような nil でも構いません。 NewNamed は TypeName の型を副作用として設定します。

func (*TypeName) Exported 1.5

func (obj *TypeName) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*TypeName) Id 1.5

func (obj *TypeName) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*TypeName) IsAlias 1.9

func (obj *TypeName) IsAlias() bool

IsAlias は, obj が型の別名であるかどうかを報告します。

func (*TypeName) Name 1.5

func (obj *TypeName) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*TypeName) Parent 1.5

func (obj *TypeName) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*TypeName) Pkg 1.5

func (obj *TypeName) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*TypeName) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*TypeName) String 1.5

func (obj *TypeName) String() string

func (*TypeName) Type 1.5

func (obj *TypeName) Type() Type

Type はオブジェクトの型を返します。

type Var 1.5

変数は宣言された変数 (関数のパラメータと結果,構造体フィールドを含む) を表します。

type Var struct {
    // エクスポートされていないフィールドがあります
}

func NewField 1.5

func NewField(pos token.Pos, pkg *Package, name string, typ Type, embedded bool) *Var

NewField は構造体フィールドを表す新しい変数を返します。 埋め込みフィールドの場合,名前は非修飾型名です。 / その下でフィールドはアクセス可能です。

func NewParam 1.5

func NewParam(pos token.Pos, pkg *Package, name string, typ Type) *Var

NewParam は,関数パラメータを表す新しい変数を返します。

func NewVar 1.5

func NewVar(pos token.Pos, pkg *Package, name string, typ Type) *Var

NewVar は新しい変数を返します。 引数は,すべてのオブジェクトで見つかった属性を設定します。

func (*Var) Anonymous 1.5

func (obj *Var) Anonymous() bool

Anonymous は変数が埋め込みフィールドかどうかを報告します。 Embedded と同じです。 下位互換性のためにのみ存在します。

func (*Var) Embedded 1.11

func (obj *Var) Embedded() bool

埋め込みは,変数が埋め込みフィールドかどうかを報告します。

func (*Var) Exported 1.5

func (obj *Var) Exported() bool

Exported は,オブジェクトがエクスポートされているかどうかを報告します (大文字で始まります) 。 オブジェクトがローカル (関数) スコープ内にあるかどうかは考慮されません。

func (*Var) Id 1.5

func (obj *Var) Id() string

Id は Id(obj.Pkg(), obj.Name()) のラッパーです。

func (*Var) IsField 1.5

func (obj *Var) IsField() bool

IsField は,変数が構造体フィールドかどうかを報告します。

func (*Var) Name 1.5

func (obj *Var) Name() string

Name は,オブジェクトの (パッケージ固有の,修飾されていない) 名前を返します。

func (*Var) Parent 1.5

func (obj *Var) Parent() *Scope

Parent は,オブジェクトが宣言されている範囲を返します。 メソッドと構造体フィールドの結果は nil です。

func (*Var) Pkg 1.5

func (obj *Var) Pkg() *Package

Pkg はそのオブジェクトが属するパッケージを返します。 結果は,ユニバーススコープ内のラベルとオブジェクトに対しては nil になります。

func (*Var) Pos 1.5

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

Pos はオブジェクトの識別子の宣言位置を返します。

func (*Var) String 1.5

func (obj *Var) String() string

func (*Var) Type 1.5

func (obj *Var) Type() Type

Type はオブジェクトの型を返します。