go语言25个关键字总结
·var和const:变量和常量的声明
·var varName type 或者 varName := value
·package and import:导入
·func:用于定义函数和方法
·return:用于从函数返回
·defer someCode:在函数退出之前执行
·go:用于并行
·select:用于选择不同类型的通讯
·interface:用于定义接口
·struct:用于定义抽象数据类型
·break、case、continue、for、fallthrough、else、if、switch、goto、default流程控制
·chan用于channel通讯
·type用于声明自定义类型
·map用于声明自定义类型
·range用于读取slice,map, channel数据
Go语言的语言符号又称为记法元素,共包括5类,标签符(identifier)、关键字(keyword)、操作符(operator)、分隔符(delimiter)、字面量(literal),它们是组成Go语言代码和程序的最基本单位。
Go语言的所有源代码都必须由Unicode编码规范的UTF-8编码格式进行编码。
标识符
在Go语言代码中,每一个标识符可以代表一个变量或一个类型,标识符是由若干字母、下划线和数字组成的字符序列,第一个字符必须为字母。同时,使用一个标识符前都必须声明。在一个代码块中,不允许重复使用同一个标识。
代码包声明并不算是一个声明,因为代码包名称并不出现在任何一个作用域中,代码包声明语句的目的只是为了鉴别若干源文件是否属于同一个代码包,或者制定导入代码包时的默认代码包引用名称。
一个限定标识符代表了对另一个代码包中的某个标识符的访问,这需要两个条件:
·另一个代码包必须事先由Go语言的导入声明import导入;
·某个标识符在代码中是可导出的。
标识符可导出的前提条件有两个:
·标识符名称中的第一个字符必须是大写;
·标识符必须是被声明在一个代码包中的变量或者类型的名称,或者是属于某个结构体类型的字段名或者方法名称。
在Go语言中还存在一类特殊的标识符,叫做预定义标识符,这类标识符随Go语言的源码一同出现,主要包括以下几种:
·所有基本数据类型的名称
·接口类型 error
·常量 true、false 以及 iota
·所有内联函数的名称,即append,cap、close、complex、copy、delete、imag、len、make、new、panic、print、println、real和recover
由一个下划线表示的标识_为空标识符,它一般被用在需要引入一个新绑定声明中,如:
import _ "runtime/cgo"
关键字
关键字是指被编程语言保留不让编程人员作为标识符使用的字符序列。因此,关键字也称为保留字。
Go语言中所有的关键字只有25个:
·程序声明:import、package
·程序实体声明和定义:chan、const、func、interface、map、struct、type、var
·程序流程控制:go、select、break、case、continue、default、defer、else、fallthrough、for、goto、if、range、return、switch
字面量
简单来说,字面量就是表示值的一种标记法,但是在Go语言中,字面量的含义更广一些:
用于表示基础数据类型值的各种字面量。
用户构造各种自定义的复合数据类型的类型字面量,如:
type Person struct {
Name string
Age uint8
Address string
}
用于表示复合数据类型的值的复合字面量,更确切地讲,它会被用来构造类型Struct(结构体)、Array(数组)、Slice(切片)和Map(字典)的值。如:
Person(Name: "Eric Pan", Age: 28, Address: "Beijing China"}
类型
一个类型确定了一类值的集合,以及可以在这些值上施加的操作。类型可以由类型名称或者类型字面量指定,类型分为基本类型和复合类型,基本类型的名称可以代表其自身,比如:
var name string
string即为一个基本类型,Go语言的基本类型有:bool、byte、int/uint、int8/uint8、int16/uint16、int32/uint32、int64/uint64、float64、complex64、complex128,共18个,基本类型的名称都必须预定义标识符。除了bool与stirng外,其他的都称为数值类型。
除了基本类型外,Go语言还有八个复合类型:Array(数组)、Struct(结构体)、Function(函数)、Interface(接口)、Slice(切片)、Map(字典)、Channel(通道)以及Pointer(指针)。
复合类型一般由若个(包括0)个其他已被定义的类型组合而成,如定义一本书的结构体:
type Book struct {
Name string
ISBN string
Press string
TotalPages uint16
}
Go语言中的类型又可以分为静态类型和动态类型,一个变量的静态类型是指在变量声明中示出的那个类型,绝大多数类型的变量都只拥有静态类型,唯独接口类型的变量除外,它除了拥有静态类型之外,还拥有动态类型,这个动态类型代表了在运行时与该变量绑定在一起的值的实际类型。
每一个类型都会有一个潜在类型,如果这个类型是一个预定义的类型,或者是一个由类型字面量构成的复合类型,那么它的潜在类型就是它自身,比如string类型的潜在类型就是在类型声明中的那个类型的潜在类型。比如我们按以下方式声明一个MyString类型:
type MyString string
MyString类型的潜在类型就是string类型的潜在类型,实际上,我们可以将MyString看作是string类型的一个别名,在Go语言中的基本数据类型rune类型就是如此,它可以看作是uint32类型的一个别名类型,其潜在类型就是uint32,但是一定要注意,MyStirng和string却并不是一个相同的类型。
潜在类型在声明过程中是具有可传递性的,如下面我们在声明一个iString类型:
type iString MyString
iString类型的潜在类型同样就是string类型。
参考:
https://www.yuque.com/docs/share/a685e35a-7d8c-4886-8bdc-892c5b8c96e3
有疑问加站长微信联系(非本文作者)