1、go语言中的关键字
go语言中一共有25个标识符(关键字)他们分别是:var、const、type、package、import、func、return、defer、go、select、interface、struct、break、case、continue、for、fallthrough、else、if、switch、goto、default、chan、type、map、range。 关键字的作用见文章末尾附录
2、go程序的组成
下面就是一个简单的go程序,从下面的源码我们可以看出,一个基本的go程序由以下几部分组成,分别是包的声明、包的导入、常量的定义、变量的声明、注释、函数等组成,下面我们将详细的介绍go程序的组成部分。
2.1、包的声明
go语言中通过关键字
package
来声明一个包,语法:package <包名>
。
假如我们声明一个main包package main
,需要注意的是,包的声明语句必须源码文件的最上面,不然编译器就会报错。注意:声明为main包的文件中必须存在一个mian方法(入口方法),并且一个程序中有且只有一个main包和main方法。
2.2、包的导入
2.2.1、基本方式导入包
导入包使用关键字import
,语法import <包名>
,例如导入fmt
、time
包的语句:
|
|
2.2.2、简写方式导入包
如果有时候需要导入的包比较多,通过上面的方式会写很多的import
,所以我们也可以通过简便的方式导入多个包,同样是使用关键字import
,然后使用一对圆括号将所有要导入的包名写在圆括号中,每个包占一行。
同时导入fmt
、time
包的语句就变的简单了,如下:
|
|
注意:如果导入的包没有使用,编译器编译的时候就会出现编译异常,会提示让我们去掉没有使用的包。
2.2.3、包的重命名
有时候我们在使用自己写的程序包的时候,或者使用第三方程序包的时候,包名的重复在所难免,如果包名相同就会使程序运行出现错误,还有的时候我们觉的导入的包的名字比较长或者拼写比较麻烦,在这些场景下就可以通过包的重命名来重命名导入的包,举个例子:
|
|
2.3、代码注释
代码注释也是go程序中的一部分。大型项目以后需要维护的时候,通过注释可以帮助我们快速理解程序。go语言的注释比较简单,和大多数编程语言差不多。
|
|
2.4、函数
go语言中通过关键字
func
来声明一个函数,如下:
|
|
2.5、变量的声明
go语言中通过关键字
var <变量名> <变量类型>
来声明变量。
声明一个变量并且赋值
|
|
声明多个变量和赋值
|
|
简写方式声明多个变量(只适用于全局变量)
|
|
同时声明了三个变量整型变量id,字符串类型变量name,和bool类型的变量sex
不指定变量类型来声明变量,声明变量的时候不指定类型,通过初始化值来确定变量的类型(这点和使用javascript,python的动态语言的用法很类似)
|
|
简写方式变量声明和赋值(只适用于局部变量)
|
|
2.5.1、声明全局变量
在函数体外声明的变量都是全局变量,全局变量可以在所有的函数中使用。
|
|
注意:全局变量的声明不能省略var关键字
2.5.2、声明局部变量
在函数体内定义的变量都是局部变量,包括函数的参数和返回值参数。它们只能在当前函数使用。
|
|
在函数作用域中使用不会报错
|
|
全局变量和局部变量可以重名,但是局部变量的优先级要高于全局变量。
|
|
3、go语言中访问控制
go语言中没有private,public关键字,那么我们该如何控制访问权限?go语言中通过约束命名(命名大小写)来实现对常量,变量,函数,接口,类型是否可以在外部包中使用。
3.1、private类型
go语言中约定如果命名首字母小写那么它就是private
的,只能在当前包中可见。
3.2、public类型
go语言中约定如果命名首字母大写那么它就是public
的,所有包中可见。现在我们就知道了为什么打印控制台的语句fmt.Println('hello world')
的方法Println
首字字母是大写的了吧。
4、附录
4.1、go语言语句结尾的分号”;”
go语言的语句结尾的分号可写可不写,因为编译器在编译源码的时候会默认在语句的结尾加上分号”;“,为了减少前键盘的次数,建议不要自己加分号。
4.2、go中关键字的解释
关键字 | 作用 |
---|---|
var和const | 变量和常量的声明 |
package和import | 包的声明和导入 |
func | 声明函数和方法 |
return | 定义函数返回值 |
defer | 延时执行 |
go | 用于并发编程 |
select | 用于选择不同类型的通讯 |
interface | 定义接口 |
struct | 定义抽象数据类型 |
break、case、continue、for、fallthrough、else、if、switch、goto、default | 流程控制 |
chan | channel通讯 |
type | 声明自定义类型 |
map | 声明map类型数据 |
range | 迭代slice、map等数据 |