Go语言规格说明书 之 词汇元素(Lexical elements)
go version go1.11 windows/amd64
本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语言的 词汇元素。
官文的 词汇元素 的 目录结构 如下:
Lexical elements
-Comments
-Tokens
-Semicolons
-Identifiers
-Keywords
-Operators and punctuation
-Integer literals
-Floating-point literals
-Imaginary literals
-Rune literals
-String literals
词汇元素:按照我的理解,就是源文件中存在的一些基本元素,无论多么复杂的源文件,都是有基本的词汇元素组成的。
下面分别介绍:
-Comments
注释。
单行注释 //;
多行注释 /* 注释内容 */
-Tokens
词汇表。
有四种类别:标识符,关键字,操作符和标点符号,字面量。
从本节后面内容可以知道,Go语言有下面5种字面量:
整数(integer)、浮点数(floating-point)、虚数(imaginary)、字符(rune)、字符串(string)。
-Semicolons
分号。
分号在其它许多语言中作为 结束符 使用,但在Go里面可以省略它。
但在某些情况下是必须的。
-Identifiers
标识符。
有 数字 和 字母 (letters)组成,不能以数字开头。
注意1,这里的 字母 包含 下划线(_),在本规格说明书前面有介绍。
注意2,有一些标识符是Go语言预先就定义好的,不可再次定义,比如关键字,下面是来自官网的列表——比较特别的标记为 红色:
Types:
bool byte complex64 complex128 error float32 float64
int int8 int16 int32 int64 rune string
uint uint8 uint16 uint32 uint64 uintptr Constants:
true false iota Zero value:
nil Functions:
append cap close complex copy delete imag len
make new panic print println real recover
-Keywords
关键字。
接触过的每个编程语言都是有的。Go语言关键字如下——比较特别的标记为 红色:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
-Operators and punctuation
操作符和标点符号。
操作符就是进行各种运算的符号了,标点符号就是Go语言开发时用到的标点符号,比如上面介绍的 分号。
+ & += &= && == != ( )
- | -= |= || < <= [ ]
* ^ *= ^= <- > >= { }
/ << /= <<= ++ = := , ;
% >> %= >>= -- ! ... . :
&^ &^=
常见操作符:加减乘除、赋值、位运算、逻辑运算、关系运算;
特别的:
:= 快捷赋值,在函数体内使用;
... 尚不清楚;
奇怪,没有反引号(`)——Tab键上方那个,英文状态下输入。用来包含 原始字符串字面量。
-Integer literals
整数字面量。
十进制、八进制、十六进制 的整数字面量。
-Floating-point literals
浮点数字面量。
从前面的Go语言关键字可以知道,Go有两种浮点数:float32、float64,32、64表示二进制位数。
可由四部分组成:整数、小数点、小数、指数。其中,只有小数点不可获取。
下面是官网的示例:
0.
72.40
072.40 // == 72.40
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
-Imaginary literals
虚数字面量。
Go语言支持 复数(complex),复数 由实部和虚部组成。这个虚数字面量特指虚部。
Go语言有两个复数类型:complex64、complex128,分别对应浮点数类型float32、float64,因为浮点数的实部、虚部的数的部分都是浮点数,且类型相同。
下面是官文的叙述字面量示例:
0i
011i // == 11i
0.i
2.71828i
1.e+0i
6.67428e-11i
1E6i
.25i
.12345E+5i
特别注意,浮点数字面量、复数字面量 是不支持八进制、十六进制的,全部是十进制。请查看上面给出的两种字面量示例中加单行注释(//)所在行的值。
-Rune literals
字符字面量(词霸翻译为 符文)。
一开始的时候,被Rune这个单词弄晕了,不知道是什么,多看了几遍,哦,原来是字符字面量啊!
官文解释:一个代表 Unicode码点 的整数值。使用 单引号 包含。
注意1,Go语言支持的Unicode字符的范围;
注意2,反斜杠的使用;
下面是是官文的示例:注意其中的illegal所在行,单引号中的部分都无法被识别为 Unicode字符,所以,非法。
'a'
'ä'
'本'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'
'\'' // rune literal containing single quote character
'aa' // illegal: too many characters
'\xa' // illegal: too few hexadecimal digits
'\0' // illegal: too few octal digits
'\uDFFF' // illegal: surrogate half
'\U00110000' // illegal: invalid Unicode code point
-String literals
字符串字面量。
字符串,就是字符的序列,字符就是上面说的Rune literals。
有两种形式:原始字符串字面量(raw string literals)、解释型字符串字面量(interpreted string literals)。
原始字符串字面量 放在 反引号(back quotes,`)中,前面有提到;
解释型字符串字面量 放在 双引号(double quotes)中;
原始字符串字面量 注意事项(3个):反斜杠没有特殊意义——不是转义字符;可以包含换行符(\n),即支持多行;出现在原始字符串字面量中的回车符(\r)会被直接丢弃。
当然,没有特殊字符时,原始字符串字面量 和 解释型字符串字面量 的值是相同的。
下面是官文的字符串字面量的示例——注意其中包含 \u、\U的:
`abc` // same as "abc"
`\n
\n` // same as "\\n\n\\n"
"\n"
"\"" // same as `"`
"Hello, world!\n"
"日本語"
"\u65e5本\U00008a9e"
"\xff\u00FF"
"\uD800" // illegal: surrogate half
"\U00110000" // illegal: invalid Unicode code point
官文示例——表示相同的字符串字面量:
"日本語" // UTF-8 input text
`日本語` // UTF-8 input text as a raw literal
"\u65e5\u672c\u8a9e" // the explicit Unicode code points
"\U000065e5\U0000672c\U00008a9e" // the explicit Unicode code points
"\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e" // the explicit UTF-8 bytes
无论那种,Go编译器处理的 都是 字符串字面量,怎么用它们,需要开发者自行斟酌。
好了,本文就介绍到这里,更多、更准确的内容,请参考官文。
如有错误,还请指出,非常感谢!
Go语言规格说明书 之 词汇元素(Lexical elements)的更多相关文章
- Go语言规格说明书 之 通道 发送语句(send) 和 接收操作符(receive)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 通道类型(Channel types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 内建函数(Built-in functions)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 结构体类型(Struct types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 类型声明(Type declarations)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- Go语言规格说明书 之 类型(Types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- Go语言规格说明书 之 select语句(Select statements)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 Go语句(Go statements)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
- Go语言规格说明书 之 接口类型(Interface types)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...
随机推荐
- TestNG简单介绍以及安装—学习笔记1
TestNG是什么 到这里,大家肯定已经运行了一些关于Selenium的测试用例了(这里主要是站着一个自动化测试工程师的角度来看待TestNG的,所以这里所说的也都是基于Web测试的验证点来说的,而不 ...
- CentOS75 安装 telnet 进行使用.
1. 安装必须要的服务 yum install xinetd telnet telnet-server 2. 修改增加root用户登录权限 vi /etc/securetty 在最后面增加两行 pts ...
- 51nod 1480 打广告(二分+线段树)
题意 给出n个区间和m个区间,从这n个区间里选一个区间a,这m个区间选一个区间b,使得a&b的长度*c最大. 思路 如果这n个区间里有一个区间包含另一个区间,那另外一个区间就可以忽略掉,进行\ ...
- ubuntu系统创建新用户并赋予sudo权限
1.创建新用户 创建新用户有两种方式:adduser和useradd adduser会为用户创建組./home目录下同名文件夹,密码,而useradd不会 因此推荐使用adduser创建用户,例: s ...
- Military Problem CodeForces - 1006E(dfs搜一下 标记一下)
题意: 就是有一颗树 然后每次询问 父结点 的 第k个结点是不是他的子嗣...是的话就输出这个子嗣..不是 就输出-1 解析: 突然想到后缀数组的sa 和 x的用法..就是我们可以用一个id标记当前 ...
- 下载tensorflow-gpu版本的源
每次换了个地方就要重新配置自己的开发环境那是特别蛋疼的,尤其是要弄到服务器跑的时候,不小心把环境弄崩了是非常惨的. 下载tensorflow-gpu版本的源 docker pull daocloud. ...
- 基础知识--:before伪元素和:after伪元素
http://book.51cto.com/art/201108/285688.htm 3.7 替换指定位置 大家都知道before和after是前.后的意思.但是奇怪的是,CSS中的:before ...
- python oracle使用心得
Oracel安装(windows 64位) 1. 首先确定版本. 2. 下载instantclient,下载地址:http://www.oracle.com/technetwork/database/ ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- 【1】ConcurrentModificationException 异常解析和快速失败,安全失败
目录 一.引起异常的代码 二.foreach原理 三.从ArrayList源码找原因 四.单线程解决方案 五.在多线程环境下的解决方法 一.引起异常的代码 以下三种的遍历集合对象时候,执行集合的rem ...