Golang - 基本流程、执行流程、注意事项、转义字符
一、Golang基本流程
1.1 Golang项目管理结构
一个 go 文件的第一行非注释代码,必须声明该文件属于哪个包。(其实类似于命名空间)
参考的目录结构:
Go源代码文件的后缀名为".go"
1.2 先看一个最简单的例子,Hello World
package main
import "fmt"
func main() {
fmt.Println("hello,世界")
}
对代码的分析:
- 语句末尾不要加分号
每一条Go语句的末尾不要加分号";"!编译器会自动加上,程序猿不要再去做画蛇添足的搞笑事情! - package main
表示该Go文件所在的包是main。在Golang中,每个文件都必须归属于一个包! - import "fmt"
表示引入一个包,包名为"fmt"。引入该包后,就可以使用fmt包中的函数。 - func main() {}
func是关键词,表示一个函数;
main是函数的名称,main代表它是一个主函数、程序的入口;
1.3 编译源代码
何为编译?通过编译器将Go源代码编译成机器可以识别的二进制码文件。
Go源代码必须先编译,才能运行!
执行 go build
编译,没有程序错误,编译成功是没有任何提示的,只会在当前目录下出现一个可执行文件。
如果程序有错误,编译时,会在错误的那行报错。
1.3.1 Windows环境下的编译
通过 go build
命令,对Go文件进行编译,生成.exe文件(Windows下的可执行文件必须是.exe后缀名)。
go build hello.go
可以直接运行这个hello.exe文件了:
注意:从为了方便和偷懒的层面来说,也可以通过 go run
命令直接运行go源文件,类似于直接执行一个脚本文件的形式。
但在真正的生产环境中,一般是先编译(go build),再运行。而且 go run
命令的底层也是先编译再运行。
1.3.2 Linux环境下的编译
// 先切换到go文件所在目录
// 编译
go build go1.go
编译成功,便会生成一个可执行文件:
// 在当前目录下执行
./go1
上面的命令代表运行当前目录下的go1可执行文件;
如果不加./,那么就代表去运行系统级/bin目录中的go1可执行文件
1.3.3 注意事项
- 可以指定生成的可执行文件名,Windows下的可执行文件的后缀必须是.exe
1.3.4 小技巧
- 在Windows下,快速cmd到当前目录
Windows下,cd命令太操蛋,一次次地cd到目录太麻烦。有两种便捷方式:
a). 选中路径,输入cmd,回车
b). shift+鼠标右击
进入到目录,鼠标移到在空白处,按住shift键+鼠标右击,选择"在此处打开命令窗口(W)"
二、Golang执行流程
2.1 对源代码先编译后运行的流程
2.2 直接go run源代码的流程
2.3 两个方式的总结
- 可移植性
编译后生成的可执行文件,任然可以运行在没有Go开发环境的机器上。
编译时,编译器会将程序运行所需的依赖库文件、资源同时地编译、链接进可执行文件中去,所以可执行文件的体积相比源代码文件肯定会大很多:
如果是直接go run源代码文件,那么目标机器上也必须要有Go开发环境,否则无法执行。 - 运行速度
明显是先编译再运行的运行速度来得更快,因为编译后已经是个二进制码文件了,可以直接被计算机所执行
三、Golang开发注意事项
3.1 Go源代码文件以"go"为扩展名
注意:Linux系统下也必须手动加上扩展名!
例如:hello.go
3.2 Go应用程序的执行入口是main()函数
3.3 Golang严格区分大小写
3.4 Go语句后面不要加分号 ;
Go的编译器会自动加上分号,程序猿自己去写上分号就显得是来搞笑的。
3.5 不要把多行语句写在同一行
Go编译器是逐行进行编译,因此程序猿写代码时,一行就写一条语句,不能把多条语句写在同一行,否则就报错!
3.6 Golang中定义的变量和引入的包必须要被使用,否则报错
Golang中,定义了一个变量或者引入了一个包,但是没有被使用,那么编译的时候就会报错!
注意:这与绝大部分的编程语言不一样。例如在Python中,定义了变量或者引入了包,没有使用是不会报错的。但是Golang认为,既然你定义了、引入了,却没有使用,那么你是在耍它,它就会报错!
归根结底的原因:引入包、定义变量肯定会去申请开辟内存,从而消耗一些计算机资源,并且会占用内存。如果没有使用,Thompson大神认为这是对计算机资源的浪费。干脆在设计Golang时就强制统一了这一风格。
四、Golang注释类型
4.1 行注释
单行注释,两个斜杠://
官方推荐使用行注释
4.2 块注释(多行注释)
多行注释:/**/
块注释主要用于针对包的详细说明或者屏蔽大块代码
注意:块注释里面不允许再嵌套块注释
五、Golang的代码风格
5.1 格式化代码的方式
5.1.1 gofmt命令
格式化一个go源码文件,并且将格式化后的内容写入覆盖原文件。重新打开就可以看到效果!
gofmt -w xxx.go
5.1.2 利用编辑器的插件
Goland内建了格式化工具,按快捷键即可格式化当前代码。VS Code需要额外下载插件。
5.2 注意第一个大括号的位置
Golang设计者的思想:一个问题尽量只有一个解决方案。在Golang中,第一个大括号必须跟在语句后面,而不能在单独的一行中!
5.3 一行尽量不要超过80个字符
预定成俗的约定,并不是强制规定!
六、Golang调用函数的方式
- 引入包
- 包名.函数名()
例如:
七、Golang转义字符
转义字符(escape char)
7.1 常见的转义字符
第一个斜杠表示转义
7.1.1 \t
一个制表位,常用于对齐排版功能
7.1.2 \n
换行符
7.1.3 \r
回车符,\r是不会换行的!
从当前行的顶头开始输出,覆盖掉之前的内容。简而言之:\r后面的内容会覆盖掉同一行顶头的内容
package main
import (
"fmt"
)
func main() {
fmt.Println("what the fuck!\raaaa")
}
7.1.4 \"
一个双引号
7.1.5 \\
要转义斜杠就需要在一个斜杠前面再加上一个斜杠,例如输出路径就需要在斜杠前再加一个斜杠。
告诉编译器,第一个斜杠是转义,第二个斜杠是输出。示例:fmt.Println("D:\\goTest\\demo1\\main")
7.2 示例
一句话输出一定格式的内容:
package main
import (
"fmt"
)
func main() {
fmt.Println("姓名\t年龄\t籍贯\t住址\nBarry\t30\txxxx\tEarth")
}
运行结果: