Golang标准库——go(2)

DevilRoshan · · 509 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  • build
  • constant
  • doc

build

包build收集有关Go的信息。

Go Path

Go路径是包含Go源代码的目录树的列表。咨询以解决在标准Go树中找不到的导入。缺省路径是GOPATH环境变量的值,它被解释为适合于操作系统的路径列表(在Unix上,该变量是用冒号分隔的字符串;在Windows上,是用分号分隔的字符串;在Plan 9中,是列表)。

Go路径中列出的每个目录必须具有规定的结构:

src /目录包含源代码。 “ src”下面的路径确定导入路径或可执行文件名称。

pkg /目录包含已安装的软件包对象。就像在Go树中一样,每个目标操作系统和体系结构对都有其自己的pkg子目录(pkg / GOOS_GOARCH)。

如果DIR是Go路径中列出的目录,则可以将源为DIR / src / foo / bar的软件包导入为“ foo / bar”,并将其编译形式安装到“ DIR / pkg / GOOS_GOARCH / foo / bar”。 a”(对于gccgo,则为“ DIR / pkg / gccgo / foo / libbar.a”)。

bin /目录包含已编译的命令。每个命令均以其源目录命名,但仅使用最后一个元素,而不使用整个路径。也就是说,将源代码在DIR / src / foo / quux中的命令安装到DIR / bin / quux中,而不是DIR / bin / foo / quux中。去除了foo /,以便您可以将DIR / bin添加到PATH中以获取安装的命令。

这是示例目录布局:

GOPATH=/home/user/gocode

/home/user/gocode/
    src/
        foo/
            bar/               (go code in package bar)
                x.go
            quux/              (go code in package main)
                y.go
    bin/
        quux                   (installed command)
    pkg/
        linux_amd64/
            foo/
                bar.a          (installed package object)

Build Constraints

构建约束,也称为构建标记,是开始的行注释

// +build

列出了在文件中应包含文件的条件。 约束可能会出现在任何类型的源文件中(不仅是Go),但它们必须出现在文件顶部附近,并且只能出现空白行和其他行注释。 这些规则意味着在Go文件中,构建约束必须出现在package子句之前。

为了将构建约束与软件包文档区分开来,必须在一系列构建约束后跟一个空行。

将构建约束评估为以空格分隔的选项的OR。 每个选项均以其逗号分隔的术语的AND表示; 并且每个术语都是字母数字词,或者以!开头的否定词。 也就是说,构建约束:

// +build linux,386 darwin,!cgo

对应于布尔公式:

(linux AND 386) OR (darwin AND (NOT cgo))

一个文件可能有多个构建约束。 总体约束是各个约束的与。 也就是说,构建约束:

// +build linux darwin
// +build 386

对应于布尔公式:

(linux OR darwin) AND 386

在特定的构建过程中,满足以下条件:

- the target operating system, as spelled by runtime.GOOS
- the target architecture, as spelled by runtime.GOARCH
- the compiler being used, either "gc" or "gccgo"
- "cgo", if ctxt.CgoEnabled is true
- "go1.1", from Go version 1.1 onward
- "go1.2", from Go version 1.2 onward
- "go1.3", from Go version 1.3 onward
- "go1.4", from Go version 1.4 onward
- "go1.5", from Go version 1.5 onward
- "go1.6", from Go version 1.6 onward
- "go1.7", from Go version 1.7 onward
- "go1.8", from Go version 1.8 onward
- any additional words listed in ctxt.BuildTags

如果在删除扩展名和可能的_test后缀后,文件名与以下任何一种模式匹配:

*_GOOS
*_GOARCH
*_GOOS_GOARCH

(例: source_windows_amd64.go)其中GOOS和GOARCH分别表示任何已知的操作系统和体系结构值,则该文件被认为具有要求这些术语的隐式构建约束(除了文件中的任何显式约束之外)。

要避免考虑将文件用于构建:

// +build ignore

(其他任何不满意的词也可以使用,但是“忽略”是常规的。)

要仅在使用cgo且仅在Linux和OS X上构建文件:

// +build linux,cgo darwin,cgo

这样的文件通常与另一个文件配对,该文件实现了其他系统的默认功能,在这种情况下,它将带有约束:

// +build !linux,!darwin !cgo

命名文件dns_windows.go将导致仅在构建Windows软件包时才包含该文件; 同样,仅当为32位x86构建软件包时,才会包括math_386.s。

使用GOOS = android除了匹配android标签和文件外,还像GOOS = linux一样匹配构建标签和文件。

Binary-Only Packages

可以以二进制形式分发软件包,而无需包括用于编译软件包的源代码。 为此,必须使用不包含构建约束排除的源文件分发该软件包,并且该源文件必须包含“ // go:binary-only-package”注释。 就像构建约束一样,此注释必须出现在文件顶部附近,仅在其前面有空白行和其他行注释,并在注释之后带有空白行,以将其与软件包文档分开。 与构建约束不同,此注释仅在非测试Go源文件中被识别。

因此,仅二进制包的最小源代码为:

//go:binary-only-package

package mypkg

源代码可能包括其他Go代码。 该代码永远不会被编译,但是会被godoc之类的工具处理,并且可能对最终用户文档很有用。

Variables

var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)

ToolDir是包含构建工具的目录。

func ArchChar

func ArchChar(goarch string) (string, error)

ArchChar返回“?” 和一个错误。 在Go的早期版本中,返回的字符串用于派生编译器和链接器工具名称,默认目标文件后缀以及默认链接器输出名称。 从Go 1.5开始,这些字符串不再因体系结构而有所不同。 它们分别是compile,link,.o和a.out。

func IsLocalImport

func IsLocalImport(path string) bool

IsLocalImport报告导入路径是本地导入路径,例如“。”,“ ..”,“ ./ foo”还是“ ../foo”。

type Context

type Context struct {
    GOARCH      string // target architecture
    GOOS        string // target operating system
    GOROOT      string // Go root
    GOPATH      string // Go path
    CgoEnabled  bool   // whether cgo can be used
    UseAllFiles bool   // use files regardless of +build lines, file names
    Compiler    string // compiler to assume when computing target paths

    // The build and release tags specify build constraints
    // that should be considered satisfied when processing +build lines.
    // Clients creating a new context may customize BuildTags, which
    // defaults to empty, but it is usually an error to customize ReleaseTags,
    // which defaults to the list of Go releases the current release is compatible with.
    // In addition to the BuildTags and ReleaseTags, build constraints
    // consider the values of GOARCH and GOOS as satisfied tags.
    BuildTags   []string
    ReleaseTags []string

    // The install suffix specifies a suffix to use in the name of the installation
    // directory. By default it is empty, but custom builds that need to keep
    // their outputs separate can set InstallSuffix to do so. For example, when
    // using the race detector, the go command uses InstallSuffix = "race", so
    // that on a Linux/386 system, packages are written to a directory named
    // "linux_386_race" instead of the usual "linux_386".
    InstallSuffix string

    // JoinPath joins the sequence of path fragments into a single path.
    // If JoinPath is nil, Import uses filepath.Join.
    JoinPath func(elem ...string) string

    // SplitPathList splits the path list into a slice of individual paths.
    // If SplitPathList is nil, Import uses filepath.SplitList.
    SplitPathList func(list string) []string

    // IsAbsPath reports whether path is an absolute path.
    // If IsAbsPath is nil, Import uses filepath.IsAbs.
    IsAbsPath func(path string) bool

    // IsDir reports whether the path names a directory.
    // If IsDir is nil, Import calls os.Stat and uses the result's IsDir method.
    IsDir func(path string) bool

    // HasSubdir reports whether dir is lexically a subdirectory of
    // root, perhaps multiple levels below. It does not try to check
    // whether dir exists.
    // If so, HasSubdir sets rel to a slash-separated path that
    // can be joined to root to produce a path equivalent to dir.
    // If HasSubdir is nil, Import uses an implementation built on
    // filepath.EvalSymlinks.
    HasSubdir func(root, dir string) (rel string, ok bool)

    // ReadDir returns a slice of os.FileInfo, sorted by Name,
    // describing the content of the named directory.
    // If ReadDir is nil, Import uses ioutil.ReadDir.
    ReadDir func(dir string) ([]os.FileInfo, error)

    // OpenFile opens a file (not a directory) for reading.
    // If OpenFile is nil, Import uses os.Open.
    OpenFile func(path string) (io.ReadCloser, error)
}

上下文指定了构建的支持上下文。

var Default Context = defaultContext()

默认是构建的默认上下文。 如果已设置,它将使用GOARCH,GOOS,GOROOT和GOPATH环境变量,否则将使用已编译代码的GOARCH,GOOS和GOROOT。

func (*Context) Import

func (ctxt *Context) Import(path string, srcDir string, mode ImportMode) (*Package, error)

导入返回有关由导入路径命名的Go软件包的详细信息,解释相对于srcDir目录的本地导入路径。 如果该路径是本地导入路径,命名了可以使用标准导入路径导入的软件包,则返回的软件包会将p.ImportPath设置为该路径。

在包含该软件包的目录中,.go,.c,.h和.s文件被视为该软件包的一部分,但以下情况除外:

- .go files in package documentation
- files starting with _ or . (likely editor temporary files)
- files with build constraints not satisfied by the context

如果发生错误,导入将返回非零错误和非零*包含部分信息的包。

func (*Context) ImportDir

func (ctxt *Context) ImportDir(dir string, mode ImportMode) (*Package, error)

ImportDir类似于Import,但是处理在命名目录中找到的Go包。

func (*Context) MatchFile

func (ctxt *Context) MatchFile(dir, name string) (match bool, err error)

MatchFile报告给定目录中具有给定名称的文件是否与上下文匹配,并将包含在该目录的ImportDir创建的Package中。

MatchFile考虑文件的名称,可以使用ctxt.OpenFile读取文件的部分或全部内容。

func (*Context) SrcDirs

func (ctxt *Context) SrcDirs() []string

SrcDirs返回软件包源根目录的列表。 它从当前的Go根目录和Go路径中提取,但是省略了不存在的目录。

type ImportMode

type ImportMode uint

ImportMode控制Import方法的行为。

const (
    // If FindOnly is set, Import stops after locating the directory
    // that should contain the sources for a package. It does not
    // read any files in the directory.
    FindOnly ImportMode = 1 << iota

    // If AllowBinary is set, Import can be satisfied by a compiled
    // package object without corresponding sources.
    //
    // Deprecated:
    // The supported way to create a compiled-only package is to
    // write source code containing a //go:binary-only-package comment at
    // the top of the file. Such a package will be recognized
    // regardless of this flag setting (because it has source code)
    // and will have BinaryOnly set to true in the returned Package.
    AllowBinary

    // If ImportComment is set, parse import comments on package statements.
    // Import returns an error if it finds a comment it cannot understand
    // or finds conflicting comments in multiple source files.
    // See golang.org/s/go14customimport for more information.
    ImportComment

    // By default, Import searches vendor directories
    // that apply in the given source directory before searching
    // the GOROOT and GOPATH roots.
    // If an Import finds and returns a package using a vendor
    // directory, the resulting ImportPath is the complete path
    // to the package, including the path elements leading up
    // to and including "vendor".
    // For example, if Import("y", "x/subdir", 0) finds
    // "x/vendor/y", the returned package's ImportPath is "x/vendor/y",
    // not plain "y".
    // See golang.org/s/go15vendor for more information.
    //
    // Setting IgnoreVendor ignores vendor directories.
    //
    // In contrast to the package's ImportPath,
    // the returned package's Imports, TestImports, and XTestImports
    // are always the exact import paths from the source files:
    // Import makes no attempt to resolve or check those paths.
    IgnoreVendor
)

type MultiplePackageError

type MultiplePackageError struct {
    Dir      string   // directory containing files
    Packages []string // package names found
    Files    []string // corresponding files: Files[i] declares package Packages[i]
}

MultiplePackageError描述了一个目录,其中包含用于多个软件包的多个可构建Go源文件。

func (*MultiplePackageError) Error

func (e *MultiplePackageError) Error() string

type NoGoError

type NoGoError struct {
    Dir string
}

NoGoError是Import用来描述不包含可构建Go源文件的目录的错误。 (它可能仍然包含测试文件,由构建标记隐藏的文件,等等。)

func (*NoGoError) Error

func (e *NoGoError) Error() string

type Package

type Package struct {
    Dir           string   // directory containing package sources
    Name          string   // package name
    ImportComment string   // path in import comment on package statement
    Doc           string   // documentation synopsis
    ImportPath    string   // import path of package ("" if unknown)
    Root          string   // root of Go tree where this package lives
    SrcRoot       string   // package source root directory ("" if unknown)
    PkgRoot       string   // package install root directory ("" if unknown)
    PkgTargetRoot string   // architecture dependent install root directory ("" if unknown)
    BinDir        string   // command install directory ("" if unknown)
    Goroot        bool     // package found in Go root
    PkgObj        string   // installed .a file
    AllTags       []string // tags that can influence file selection in this directory
    ConflictDir   string   // this directory shadows Dir in $GOPATH
    BinaryOnly    bool     // cannot be rebuilt from source (has //go:binary-only-package comment)

    // Source files
    GoFiles        []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
    CgoFiles       []string // .go source files that import "C"
    IgnoredGoFiles []string // .go source files ignored for this build
    InvalidGoFiles []string // .go source files with detected problems (parse error, wrong package name, and so on)
    CFiles         []string // .c source files
    CXXFiles       []string // .cc, .cpp and .cxx source files
    MFiles         []string // .m (Objective-C) source files
    HFiles         []string // .h, .hh, .hpp and .hxx source files
    FFiles         []string // .f, .F, .for and .f90 Fortran source files
    SFiles         []string // .s source files
    SwigFiles      []string // .swig files
    SwigCXXFiles   []string // .swigcxx files
    SysoFiles      []string // .syso system object files to add to archive

    // Cgo directives
    CgoCFLAGS    []string // Cgo CFLAGS directives
    CgoCPPFLAGS  []string // Cgo CPPFLAGS directives
    CgoCXXFLAGS  []string // Cgo CXXFLAGS directives
    CgoFFLAGS    []string // Cgo FFLAGS directives
    CgoLDFLAGS   []string // Cgo LDFLAGS directives
    CgoPkgConfig []string // Cgo pkg-config directives

    // Dependency information
    Imports   []string                    // import paths from GoFiles, CgoFiles
    ImportPos map[string][]token.Position // line information for Imports

    // Test information
    TestGoFiles    []string                    // _test.go files in package
    TestImports    []string                    // import paths from TestGoFiles
    TestImportPos  map[string][]token.Position // line information for TestImports
    XTestGoFiles   []string                    // _test.go files outside package
    XTestImports   []string                    // import paths from XTestGoFiles
    XTestImportPos map[string][]token.Position // line information for XTestImports
}

Package描述了在目录中找到的Go软件包。

func Import

func Import(path, srcDir string, mode ImportMode) (*Package, error)

Import 导入是Default.Import的简写。

func ImportDir

func ImportDir(dir string, mode ImportMode) (*Package, error)

ImportDir是 Default.ImportDir的简写。

func (*Package) IsCommand

func (p *Package) IsCommand() bool

IsCommand报告该包是否被视为要安装的命令(不仅仅是库)。 名为“ main”的包被视为命令。

constant

包常量实现了表示无类型Go常量的值及其对应的操作。

当由于错误而未知的值时,可以使用特殊的未知值。 除非另有说明,否则对未知值进行的运算会产生未知值。

func BitLen

func BitLen(x Value) int

BitLen返回以二进制表示形式表示绝对值x所需的位数。 x必须是Int或Unknown。 如果x为未知,则结果为0。

func BoolVal

func BoolVal(x Value) bool

BoolVal返回x的Go布尔值,该值必须是Bool或Unknown。 如果x为未知,则结果为false。

func Bytes

func Bytes(x Value) []byte

字节以小尾数二进制表示形式返回x的绝对值的字节; x必须是一个Int。

func Compare

func Compare(x_ Value, op token.Token, y_ Value) bool

比较返回比较结果x op y。 必须为操作数定义比较。 如果操作数之一为未知,则结果为false。

func Float32Val

func Float32Val(x Value) (float32, bool)

Float32Val类似于Float64Val,但用于float32而不是float64。

func Float64Val

func Float64Val(x Value) (float64, bool)

Float64Val返回x的最接近的Go float64值以及结果是否准确;否则,返回0。 x必须是数字或未知,但不能是复数。 如果值太小(太接近0)而无法表示为float64,则Float64Val会默默下溢至0。结果符号始终与x的符号匹配,即使对于0也是如此。如果x为Unknown,则结果为(0,false)。

func Int64Val

func Int64Val(x Value) (int64, bool)

Int64Val返回x的Go int64值以及结果是否准确; x必须是Int或Unknown。 如果结果不正确,则其值不确定。 如果x为未知,则结果为(0,false)。

func Sign

func Sign(x Value) int

根据x <0,x == 0或x> 0,符号返回-1、0或1。 x必须为数字或未知。 对于复数值x,如果x == 0,则符号为0,否则为!=0。如果x为Unknown,则结果为1。

func StringVal

func StringVal(x Value) string

StringVal返回x的Go字符串值,该值必须为String或Unknown。 如果x为未知,则结果为“”。

func Uint64Val

func Uint64Val(x Value) (uint64, bool)

Uint64Val返回x的Go uint64值以及结果是否准确;否则,返回0。 x必须是Int或Unknown。 如果结果不正确,则其值不确定。 如果x为未知,则结果为(0,false)。

type Kind

type Kind int

种类指定由值表示的值的种类。

const (
    // unknown values
    Unknown Kind = iota

    // non-numeric values
    Bool
    String

    // numeric values
    Int
    Float
    Complex
)

type Value

type Value interface {
    // Kind returns the value kind.
    Kind() Kind

    // String returns a short, quoted (human-readable) form of the value.
    // For numeric values, the result may be an approximation;
    // for String values the result may be a shortened string.
    // Use ExactString for a string representing a value exactly.
    String() string

    // ExactString returns an exact, quoted (human-readable) form of the value.
    // If the Value is of Kind String, use StringVal to obtain the unquoted string.
    ExactString() string
    // contains filtered or unexported methods
}

Value表示Go常数的值。

func BinaryOp

func BinaryOp(x_ Value, op token.Token, y_ Value) Value

BinaryOp返回二进制表达式x op y的结果。 必须为操作数定义操作。 如果操作数之一为未知,则结果为未知。 BinaryOp不处理比较或移位; 而是使用“比较”或“ Shift”。

要强制对Int操作数进行整数除法,请使用op == token.QUO_ASSIGN代替token.QUO; 在这种情况下,结果保证为Int。 除以零会导致运行时恐慌。

func Denom

func Denom(x Value) Value

Denom返回x的分母; x必须是Int,Float或Unknown。 如果x为未知,或者太大或太小而无法表示为分数,则结果为未知。 否则结果是Int> = 1。

func Imag

func Imag(x Value) Value

Imag返回x的虚部,该虚部必须是数字或未知值。 如果x为未知,则结果为未知。

func MakeBool

func MakeBool(b bool) Value

MakeBool返回b的Bool值。

func MakeFloat64

func MakeFloat64(x float64) Value

MakeFloat64返回x的Float值。 如果x不是有限的,则结果为未知。

func MakeFromBytes

func MakeFromBytes(bytes []byte) Value

给定其Little-endian二进制表示形式的字节,MakeFromBytes返回Int值。 空字节片参数表示0。

func MakeFromLiteral

func MakeFromLiteral(lit string, tok token.Token, zero uint) Value

MakeFromLiteral返回Go文字字符串的相应整数,浮点数,虚数,字符或字符串值。 tok值必须是token.INT,token.FLOAT,token.IMAG,token.CHAR或token.STRING之一。 最后一个参数必须为零。 如果文字字符串语法无效,则结果为未知。

func MakeImag

func MakeImag(x Value) Value

MakeImag返回复杂值x * i; x必须是Int,Float或Unknown。 如果x为未知,则结果为未知。

func MakeInt64

func MakeInt64(x int64) Value

MakeInt64返回x的Int值。

func MakeString

func MakeString(s string) Value

MakeString返回s的String值。

func MakeUint64

func MakeUint64(x uint64) Value

MakeUint64返回x的Int值。

func MakeUnknown

func MakeUnknown() Value

MakeUnknown返回未知值。

func Num

func Num(x Value) Value

Num返回x的分子; x必须是Int,Float或Unknown。 如果x为未知,或者太大或太小而无法表示为分数,则结果为未知。 否则,结果是一个与x具有相同符号的Int。

func Real

func Real(x Value) Value

实数返回x的实数部分,该部分必须是数字或未知值。 如果x为未知,则结果为未知。

func Shift

func Shift(x Value, op token.Token, s uint) Value

Shift返回带有op == token.SHL或token.SHR(<<或>>)的移位表达式x op s的结果。 x必须是Int或Unknown。 如果x为未知,则结果为x。

func ToComplex

func ToComplex(x Value) Value

如果x可表示为Complex,则ToComplex将x转换为Complex值。 否则,它将返回未知。

func ToFloat

func ToFloat(x Value) Value

如果x可表示为Float,则ToFloat会将x转换为Float值。 否则,它将返回未知。

func ToInt

func ToInt(x Value) Value

如果x可表示为Int,则ToInt将x转换为Int值。 否则,它将返回未知。

func UnaryOp

func UnaryOp(op token.Token, y Value, prec uint) Value

UnaryOp返回一元表达式op y的结果。 必须为操作数定义操作。 如果prec> 0,则以位为单位指定^(异或)结果大小。 如果y为未知,则结果为未知。

doc

doc包从Go的AST提取源码文档。

Variables

var IllegalPrefixes = []string{
    "copyright",
    "all rights",
    "author",
}

Examples

func Examples(files ...*ast.File) []*Example

Examples返回在文件中找到的示例,并按“名称”字段排序。 Order字段记录遇到示例的顺序。

可播放示例必须放在名称以“ _test”结尾的程序包中。 在以下两种情况下,示例都是“可播放的”(“播放”字段为非零):

- The example function is self-contained: the function references only
  identifiers from other packages (or predeclared identifiers, such as
  "int") and the test file does not include a dot import.
- The entire test file is the example: the file contains exactly one
  example function, zero test or benchmark functions, and at least one
  top-level function, type, variable, or constant declaration other
  than the example function.

func Synopsis

func Synopsis(s string) string

大纲返回s中第一句话的纯净版本。 该句子在第一个句点后跟空格,而不是紧跟一个大写字母后结束。 结果字符串没有\ n,\ r或\ t字符,并且单词之间仅使用单个空格。 如果s以任何IllegalPrefixes开头,则结果为空字符串。

func ToHTML

func ToHTML(w io.Writer, text string, words map[string]string)

ToHTML将注释文本转换为格式化的HTML。该注释是由DocReader准备的,因此众所周知,它没有前导,尾随的空白行,也没有尾随空格。注释标记已被删除。

无缩进的非空白行的每个跨度都转换为单个段落。该规则有一个例外:一个范围由一行组成,其后是另一个段落范围,以大写字母开头,并且不包含标点符号。

一段缩进的行将转换为<pre>块,并删除公共缩进前缀。

注释文本中的URL转换为链接;如果URL也出现在单词映射中,则从映射中获取链接(如果对应的映射值为空字符串,则URL不会转换为链接)。

单词映射中显示的Go标识符以斜体显示;如果对应的映射值不是空字符串,则将其视为URL并将该单词转换为链接。

func ToText

func ToText(w io.Writer, text string, indent, preIndent string, width int)

ToText准备注释文本以在文本输出中呈现。 它将文本段落包装为宽度或更小的Unicode代码点,然后在每行前面加上缩进。 在预格式化的部分(例如程序文本)中,它在每条非空白行的前面加上preIndent。

type Example

type Example struct {
    Name        string // name of the item being exemplified
    Doc         string // example function doc string
    Code        ast.Node
    Play        *ast.File // a whole program version of the example
    Comments    []*ast.CommentGroup
    Output      string // expected output
    EmptyOutput bool   // expect empty output
    Order       int    // original source code order
}

Example代表在源文件中找到的示例函数。

type Filter

type Filter func(string) bool

type Func

type Func struct {
    Doc  string
    Name string
    Decl *ast.FuncDecl

    // methods
    // (for functions, these fields have the respective zero value)
    Recv  string // actual   receiver "T" or "*T"
    Orig  string // original receiver "T" or "*T"
    Level int    // embedding level; 0 means not embedded
}

Func是func声明的文档。

type Mode

type Mode int

Mode 值控制“新建”的操作。

const (
    // extract documentation for all package-level declarations,
    // not just exported ones
    AllDecls Mode = 1 << iota

    // show all embedded methods, not just the ones of
    // invisible (unexported) anonymous fields
    AllMethods
)

type Note

type Note struct {
    Pos, End token.Pos // position range of the comment containing the marker
    UID      string    // uid found with the marker
    Body     string    // note body text
}

注释表示以“ MARKER(uid):注释正文”开头的标记注释。 识别带有2个或更多大写[A-Z]字母标记和至少一个字符的uid的笔记。 uid后面的“:”是可选的。 便笺收集在Package.Notes映射中,由便笺标记索引。

type Package

type Package struct {
    Doc        string
    Name       string
    ImportPath string
    Imports    []string
    Filenames  []string
    Notes      map[string][]*Note
    // DEPRECATED. For backward compatibility Bugs is still populated,
    // but all new code should use Notes instead.
    Bugs []string

    // declarations
    Consts []*Value
    Types  []*Type
    Vars   []*Value
    Funcs  []*Func
}

包是整个包的文档。

func New

func New(pkg *ast.Package, importPath string, mode Mode) *Package

New计算给定包AST的包文档。 New拥有AST pkg的所有权,并且可以对其进行编辑或覆盖。

func (*Package) Filter

func (p *Package) Filter(f Filter)

过滤器消除了没有通过过滤器f的名称的文档。 TODO(gri):将“ Type.Method”识别为名称。

type Type

type Type struct {
    Doc  string
    Name string
    Decl *ast.GenDecl

    // associated declarations
    Consts  []*Value // sorted list of constants of (mostly) this type
    Vars    []*Value // sorted list of variables of (mostly) this type
    Funcs   []*Func  // sorted list of functions returning this type
    Methods []*Func  // sorted list of methods (including embedded ones) of this type
}

Type是类型声明的文档。

type Value

type Value struct {
    Doc   string
    Names []string // var or const names in declaration order
    Decl  *ast.GenDecl
    // contains filtered or unexported fields
}

值是var或const声明的文档(可能是分组的)。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:DevilRoshan

查看原文:Golang标准库——go(2)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

509 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传