非常教程

Go参考手册

go

go/token(令牌)

  • import "go/token"
  • Overview
  • Index

概观

Package标记定义代表Go编程语言的词法标记的常量和标记(打印,谓词)的基本操作。

索引

  • Constants
  • type File
  • func (f *File) AddLine(offset int)
  • func (f *File) AddLineInfo(offset int, filename string, line int)
  • func (f *File) Base() int
  • func (f *File) Line(p Pos) int
  • func (f *File) LineCount() int
  • func (f *File) MergeLine(line int)
  • func (f *File) Name() string
  • func (f *File) Offset(p Pos) int
  • func (f *File) Pos(offset int) Pos
  • func (f *File) Position(p Pos) (pos Position)
  • func (f *File) PositionFor(p Pos, adjusted bool) (pos Position)
  • func (f *File) SetLines(lines []int) bool
  • func (f *File) SetLinesForContent(content []byte)
  • func (f *File) Size() int
  • type FileSet
  • func NewFileSet() *FileSet
  • func (s *FileSet) AddFile(filename string, base, size int) *File
  • func (s *FileSet) Base() int
  • func (s *FileSet) File(p Pos) (f *File)
  • func (s *FileSet) Iterate(f func(*File) bool)
  • func (s *FileSet) Position(p Pos) (pos Position)
  • func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)
  • func (s *FileSet) Read(decode func(interface{}) error) error
  • func (s *FileSet) Write(encode func(interface{}) error) error
  • type Pos
  • func (p Pos) IsValid() bool
  • type Position
  • func (pos *Position) IsValid() bool
  • func (pos Position) String() string
  • type Token
  • func Lookup(ident string) Token
  • func (tok Token) IsKeyword() bool
  • func (tok Token) IsLiteral() bool
  • func (tok Token) IsOperator() bool
  • func (op Token) Precedence() int
  • func (tok Token) String() string

包文件

position.go serialize.go token.go

常量

一组基于优先级的表达式分析的常量。非运营商的优先级最低,其次是运营商从优先级1开始直到一元运营商。最高优先级用作选择器,索引和其他运算符和分隔符令牌的“全部捕捉”优先级。

const (
        LowestPrec  = 0 // non-operators
        UnaryPrec   = 6
        HighestPrec = 7
)

type File(显示源代码)

文件是属于FileSet的文件的句柄。文件具有名称,大小和行偏移量表。

type File struct {
        // contains filtered or unexported fields
}

func (*File) AddLine(显示源代码)

func (f *File) AddLine(offset int)

AddLine为新行添加行偏移量。行偏移量必须大于前一行的偏移量并小于文件大小; 否则行偏移将被忽略。

func (*File) AddLineInfo(显示源代码)

func (f *File) AddLineInfo(offset int, filename string, line int)

AddLineInfo为给定的文件偏移量添加替代文件和行号信息。偏移量必须大于先前添加的替代线信息的偏移量并小于文件大小; 否则信息被忽略。

AddLineInfo通常用于注册//行文件名的替代位置信息:源文件中的行注释。

func (*File) Base(显示源代码)

func (f *File) Base() int

Base返回使用AddFile注册的文件f的基本偏移量。

func (*File) Line(显示源代码)

func (f *File) Line(p Pos) int

Line返回给定文件位置p的行号; p必须是该文件或NoPos中的Pos值。

func (*File) LineCount(显示源代码)

func (f *File) LineCount() int

LineCount返回文件f中的行数。

func (*File) MergeLine(显示源代码)

func (f *File) MergeLine(line int)

MergeLine将一行与以下行合并。它类似于用一个空格替换行尾的换行符(以不改变剩余的偏移量)。要获得行号,请参考例如Position.Line。如果给出无效的行号,MergeLine将会发生混乱。

func (*File) Name(显示源代码)

func (f *File) Name() string

Name返回使用AddFile注册的文件f的文件名。

func (*File) Offset(显示源代码)

func (f *File) Offset(p Pos) int

偏移返回给定文件位置p的偏移量; p必须是该文件中的有效Pos值。f.Offset(f.Pos(offset))== offset。

func (*File) Pos(显示源代码)

func (f *File) Pos(offset int) Pos

Pos返回给定文件偏移量的Pos值; 偏移量必须<= f.Size()。f.Pos(f.Offset(p))== p。

func (*File) Position(显示源代码)

func (f *File) Position(p Pos) (pos Position)

位置返回给定文件位置p的位置值。调用f.Position(p)等效于调用f.PositionFor(p,true)。

func (*File) PositionFor(显示源代码)

func (f *File) PositionFor(p Pos, adjusted bool) (pos Position)

PositionFor返回给定文件位置p的Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是f或NoPos中的Pos值。

func (*File) SetLines(显示源代码)

func (f *File) SetLines(lines []int) bool

SetLines设置文件的行偏移量并报告它是否成功。线偏移量是每行第一个字符的偏移量; 例如对于内容“ab \ nc \ n”,行偏移是{0,3}。一个空文件有一个空行偏移表。每行偏移量必须大于前一行的偏移量并小于文件大小; 否则SetLines失败并返回false。在SetLines返回之后,调用者不得改变提供的切片。

func (*File) SetLinesForContent(显示源代码)

func (f *File) SetLinesForContent(content []byte)

SetLinesForContent设置给定文件内容的行偏移量。它忽略了改变位置的//行注释。

func (*File) Size(显示源代码)

func (f *File) Size() int

Size返回使用AddFile注册的文件f的大小。

type FileSet(显示源代码)

FileSet代表一组源文件。文件集的方法是同步的; 多个goroutines可以同时调用它们。

type FileSet struct {
        // contains filtered or unexported fields
}

func NewFileSet(显示源代码)

func NewFileSet() *FileSet

NewFileSet创建一个新的文件集。

func (*FileSet) AddFile(显示源代码)

func (s *FileSet) AddFile(filename string, base, size int) *File

AddFile将具有给定文件名,基础偏移量和文件大小的新文件添加到文件集s并返回文件。多个文件可能具有相同的名称。基本偏移不得小于FileSet的Base(),并且大小不能是负数。作为一种特殊情况,如果提供了否定基数,则将使用FileSet的Base()的当前值。

添加文件将把文件集的Base()值设置为base + size + 1作为下一个文件的最小基值。以下关系存在于给定文件偏移量的Pos值p之间:

int(p) = base + offs

在范围0,大小和因此在范围基地,基地+大小的偏差。为了方便起见,File.Pos可用于从文件偏移量创建文件特定的位置值。

func (*FileSet) Base(显示源代码)

func (s *FileSet) Base() int

Base返回添加下一个文件时必须提供给AddFile的最小基本偏移量。

func (*FileSet) File(显示源代码)

func (s *FileSet) File(p Pos) (f *File)

文件返回包含位置p的文件。如果没有找到这样的文件(例如p == NoPos),结果为零。

func (*FileSet) Iterate(显示源代码)

func (s *FileSet) Iterate(f func(*File) bool)

按照添加的顺序迭代调用f来获取文件集中的文件,直到f返回false。

func (*FileSet) Position(显示源代码)

func (s *FileSet) Position(p Pos) (pos Position)

位置将文件集中的Pos p转换为Position值。调用s.Position(p)等效于调用s.PositionFor(p,true)。

func (*FileSet) PositionFor(显示源代码)

func (s *FileSet) PositionFor(p Pos, adjusted bool) (pos Position)

PositionFor将文件集中的Pos p转换为Position值。如果调整已设置,则可以通过改变位置//行注释来调整位置; 否则这些评论被忽略。p必须是s或NoPos中的Pos值。

func (*FileSet) Read(显示源代码)

func (s *FileSet) Read(decode func(interface{}) error) error

读取调用解码以将一个文件集反序列化为s; s不能为零。

func (*FileSet) Write(显示源代码)

func (s *FileSet) Write(encode func(interface{}) error) error

编写调用编码以序列化文件集。

type Pos(显示源代码)

Pos是文件集中源位置的紧凑编码。它可以转换为一个更方便,但更大的表示的位置。

给定文件的Pos值是基本范围base + size中的数字,其中base和size是通过AddFile将文件添加到文件集时指定的。

要为特定源偏移量创建Pos值(以字节为单位),请首先使用FileSet.AddFile将相应文件添加到当前文件集,然后调用该文件的File.Pos(offset)。给定特定文件集fset的Pos值p,通过调用fset.Position(p)获得相应的Position值。

可以将Pos值直接与通常的比较运算符进行比较:如果两个Pos值p和q在同一个文件中,则比较p和q就相当于比较各个源文件偏移量。如果p和q在不同的文件中,如果p所隐含的文件被添加到q所隐含的文件之前的相应文件集中,则p <q为真。

type Pos int

Pos的零值是NoPos; 没有与之关联的文件和行信息,并且NoPos.IsValid()为false。NoPos总是小于任何其他Pos值。NoPos的相应位置值是位置的零值。

const NoPos Pos = 0

func (Pos) IsValid(显示源代码)

func (p Pos) IsValid() bool

IsValid报告该位置是否有效。

type Position(显示源代码)

位置描述包括文件,行和列位置的任意源位置。如果行号> 0,则位置有效。

type Position struct {
        Filename string // filename, if any
        Offset   int    // offset, starting at 0
        Line     int    // line number, starting at 1
        Column   int    // column number, starting at 1 (byte count)
}

func (*Position) IsValid(显示源代码)

func (pos *Position) IsValid() bool

IsValid报告该位置是否有效。

func (Position) String(显示源代码)

func (pos Position) String() string

字符串以几种形式之一返回一个字符串:

file:line:column    valid position with file name
line:column         valid position without file name
file                invalid position with file name
-                   invalid position without file name

type Token(显示源代码)

令牌是Go编程语言的一组词汇标记。

type Token int

令牌列表。

const (
        // Special tokens
        ILLEGAL Token = iota
        EOF
        COMMENT

        // Identifiers and basic type literals
        // (these tokens stand for classes of literals)
        IDENT  // main
        INT    // 12345
        FLOAT  // 123.45
        IMAG   // 123.45i
        CHAR   // 'a'
        STRING // "abc"

        // Operators and delimiters
        ADD // +
        SUB // -
        MUL // *
        QUO // /
        REM // %

        AND     // &
        OR      // |
        XOR     // ^
        SHL     // <<
        SHR     // >>
        AND_NOT // &^

        ADD_ASSIGN // +=
        SUB_ASSIGN // -=
        MUL_ASSIGN // *=
        QUO_ASSIGN // /=
        REM_ASSIGN // %=

        AND_ASSIGN     // &=
        OR_ASSIGN      // |=
        XOR_ASSIGN     // ^=
        SHL_ASSIGN     // <<=
        SHR_ASSIGN     // >>=
        AND_NOT_ASSIGN // &^=

        LAND  // &&
        LOR   // ||
        ARROW // <-
        INC   // ++
        DEC   // --

        EQL    // ==
        LSS    // <
        GTR    // >
        ASSIGN // =
        NOT    // !

        NEQ      // !=
        LEQ      // <=
        GEQ      // >=
        DEFINE   // :=
        ELLIPSIS // ...

        LPAREN // (
        LBRACK // [
        LBRACE // {
        COMMA  // ,
        PERIOD // .

        RPAREN    // )
        RBRACK    // ]
        RBRACE    // }
        SEMICOLON // ;
        COLON     // :

        // Keywords
        BREAK
        CASE
        CHAN
        CONST
        CONTINUE

        DEFAULT
        DEFER
        ELSE
        FALLTHROUGH
        FOR

        FUNC
        GO
        GOTO
        IF
        IMPORT

        INTERFACE
        MAP
        PACKAGE
        RANGE
        RETURN

        SELECT
        STRUCT
        SWITCH
        TYPE
        VAR
)

func Lookup(显示源代码)

func Lookup(ident string) Token

Lookup会将标识符映射到其关键字标记或IDENT(如果不是关键字)。

func (Token) IsKeyword(显示源代码)

func (tok Token) IsKeyword() bool

IsKeyword对与关键字相对应的标记返回true; 否则返回false。

func (Token) IsLiteral(显示源代码)

func (tok Token) IsLiteral() bool

对于与标识符和基本类型文字相对应的标记,IsLiteral返回true; 否则返回false。

func (Token) IsOperator(显示源代码)

func (tok Token) IsOperator() bool

IsOperator对运算符和分隔符对应的令牌返回true; 否则返回false。

func (Token) Precedence(显示源代码)

func (op Token) Precedence() int

优先级返回二元运算符op的运算符优先级。如果op不是二元运算符,则结果为LowestPrecedence。

func (Token) String(显示源代码)

func (tok Token) String() string

字符串返回对应于令牌tok的字符串。对于运算符,分隔符和关键字,字符串是实际的令牌字符序列(例如,对于令牌ADD,字符串是“+”)。对于所有其他标记,字符串对应于标记常量名称(例如对于标记IDENT,字符串是“IDENT”)。

Go

Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

主页 https://golang.org/
源码 https://go.googlesource.com/go
发布版本 1.9.2

Go目录

1.档案 | archive
2.缓冲区 | bufio
3.内置 | builtin
4.字节 | bytes
5.压缩 | compress
6.容器 | container
7.上下文 | context
8.加密 | crypto
9.数据库 | database
10.调试 | debug
11.编码 | encoding
12.错误 | errors
13. expvar
14.flag
15. fmt
16. go
17.散列 | hash
18.html
19.图像 | image
20.索引 | index
21.io
22.日志 | log
23.数学 | math
24. math/big
25.math/bits
26.math/cmplx
27.math/rand
28.拟态 | mime
29.net
30.net/http
31. net/mail
32. net/rpc
33.net/smtp
34. net/textproto
35. net/url
36.os
37.路径 | path
38.插件 | plugin
39.反射 | reflect
40.正则表达式 | regexp
41.运行时 | runtime
42.排序算法 | sort
43.转换 | strconv
44.字符串 | strings
45.同步 | sync
46.系统调用 | syscall
47.测试 | testing
48.文本 | text
49.时间戳 | time
50.unicode
51.不安全性 | unsafe
52.Go 语言数据类型
53.Go 语言基础语法
54.Go 语言结构
55.Go 语言 select 语句
56.Go 语言 switch 语句
57.Go 语言 if 语句嵌套
58.Go 语言 if…else 语句
59.Go 语言 if 语句
60.Go 语言运算符
61.Go 语言常量
62.Go 语言函数闭包
63.Go 语言函数作为实参
64.Go 语言函数引用传递值
65.Go 语言函数值传递值
66.Go 语言函数
67.Go 语言 goto 语句
68.Go 语言 continue 语句
69.Go 语言 break 语句
70.Go 语言循环嵌套
71.Go 语言 for 循环
72.Go 语言结构体
73.Go 语言指针作为函数参数
74.Go 语言指向指针的指针
75.Go 语言指针数组
76.Go 语言指针
77.Go 语言向函数传递数组
78.Go 语言多维数组
79.Go 语言变量作用域
80.Go 语言函数方法
81.Go 错误处理
82.Go 语言接口
83.Go 语言类型转换
84.Go 语言递归函数
85.Go 语言Map(集合)
86.Go 语言范围(Range)
87.Go 语言切片(Slice)
88.Go 并发
89.Go fmt.Sprintf 格式化字符串