一门计算机语言的学习依然从永恒的“hello,world”这个例子开始。
创建一个go文件,命名为:main.go
|
|
Go是编译型的语言。Go的工具链将程序的源文件转变成机器相关的原生二进制指令。这些工具可以通过单一的go命令配合其子命令进行使用。最简单的子命令是run
,它将一个或多个以.go
后缀的源文件进行编译、链接,然后运行生成的可执行文件:
|
|
不出意料地,控制台会输出:
|
|
Go原生地支持Unicode,所以它可以处理所有国家地语言。
如果这个程序不是一次性的实验,那么编译输出成一个可复用的程序比较好。这通过子命令build
来实现:
|
|
这条命令生成了一个叫做main.exe
的可执行文件,执行命令,得到
|
|
说说main.go
程序本身。Go代码是使用包来组织的,包类似于其他语言中的库或者模块。一个包由一个或多个.go
源文件组成,放在一个文件夹中,该文件夹的名字描述了包的作用。每一个源文件的开始都用package
声明,例子里面是package main
,指明了这个文件属于哪个包。后面跟着它导入的其他包的列表,然后是存储在文件的程序声明。
Go的标准库中由100多个包用来完成输入、输出、排序、文本处理等常规任务,也有syscall
,runtime
包等进行底层相关的处理任务。例如,fmt
包中的函数用来格式化输出和扫描输入。Println
是fmt
中一个基本的输出函数,它输出一个或多个用空格分隔的值,结尾使用一个换行符,这样看起来这些值是单行输出。
名为main
的包比较特殊,它用来定义一个独立的可执行程序,而不是库。在main
包中,函数main
也是特殊的,不管在什么程序中,main
做什么事情,它总是程序开始执行的地方。当然,main
通常调用其他包中的函数来做更多的事情,比如fmt.Println
。
我们需要告诉编译器源文件需要哪些包,用package
声明后面的import
来导入这些包。
你必须精确地导入需要地包。在缺失导入或存在不需要的包的情况下,编译会失败,这种严格的要求可以防止程序演化中引用不需要的包。当然,其实你并不需要花费额外的精力来判断你需要精确导入哪些包,Goland
会为你在使用某个包的函数的时候,为你自动导入这个包,它也会为你删除冗余的包。
import
声明必须跟在package
声明之后。import
导入声明后面,是组成程序的函数、变量、常量、类型(以func、var、const、type开头)声明。
一个函数的声明由func
关键字、函数名、参数列表(main函数为空)、返回值列表(可以为空)、放在大括号内的函数体组成,函数体定义函数是用来做什么的。
Go不需要再语句或声明后面使用分号结尾(C#,C++,Java中需要),除非有多语句或声明出现再同一行。事实上,在程序进行预编译的时候,跟在特定符号后面的换行符会被转换为分号,所以在什么地方换行会影响对Go代码的解析。例如,“{”
符号必须和关键字func
在同一行,不能单独成行,并且在x+y
这个表达式中,换行符可以在+
操作符的后面,但是不能在+
操作符的前面。如:
|
|
Go对于代码的格式化要求非常严格。gofmt
工具将代码以标准格式重写,go工具的fmt
子命令使用gofmt
工具来格式化指定包里的所有文件或者当前文件夹中的文件(默认情况下)。
许多文本编辑器可以配置为每次在保存文件时(ctrl+s
)自动运行gofmt
,因此源文件总可以保持正确的形式。此外,一个相关的工具goimports
可以按需管理导入声明的插入和移除。它不是标准发布版的一部分。
例如Goland
:
打开设置
->工具
->保存时的操作
勾选重新格式化代码
,优化import
即可
此外goimports
工具可以用Goland
插件-GO Imports Tidy
代替,使用快捷键ctrl+鼠标右键双击
进行包整理