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调用函数的方式

  1. 引入包
  2. 包名.函数名()
    例如:



七、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")
}

运行结果:

posted @ 2019-12-12 17:23  root01_barry  阅读(638)  评论(0编辑  收藏  举报