Go入门介绍(Chapter Two)
Go语言快速入门
- 需求
- 需求开发一个hello.go程序,可以输出“hello,world”
- 开发的步骤
-
开发这个程序时,我们的目录结构是什么样子的
goprogect | src | go_code | project01 | ---main ---package
- 第一个程序hello.go
package main
import "fmt"
func main(){
fmt.Println("hello,world!")
}
Golang执行流程分析
- 如果对源码编译后,再执行,Go的执行流程如下
- 如果我们对源码直接执行go run源码,Go的执行流程如下
- Golang执行流程分析
- 如果我们先编译生成可执行文件,那么我们可以将该可执行文件拷贝到没有Go开发环境的机器上,仍然可以运行
- 如果我们直接go run go源代码,那么如果要在另一个机器上这么运行,也需要go开发环境,否则无法执行。
- 在编译时候,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变化了很多
Golang编译和运行说明
编译
- 有了go源文件,通过编译器可以将其编译成机器可以识别得二进制编码文件
- 在该源文件目录下,通过go build 对hello.go文件进行编译。可以指定生成的可执行文件名,在windows下,必须是.exe后缀
-
具体举例
-
-
这里面我们可以利用
go help build
来获取build的帮助信息,其中我们可以利用-o
参数来指定输出的文件格式(windows下必须加.exe后缀) -
- 如果程序没有错误,没有任何提示,会在当前目录下出现一个可执行文件(Windows下是.exe,Linux下是一个可执行文件),该文件是二进制码文件,也是可执行的程序
- 如果程序有错误,编译时:会在错误的那行报错,有助于程序员调试错误
运行
- 直接运行生成的可执行Go程序,比如hello.exe
- 可以实现利用
gofmt -w 文件名.go
对文件进行格式化 - 通过运行工具
go run
对源代码文件进行运行
Go程序开发的注意事项
-
Go源文件以"go"为扩展名
-
Go应用程序的执行入口是main()方法
-
Go语言严格区分大小写
-
Go方法由一条条语句构成,每个语句后面不需要分号(Go语言会在每行后面自动加分号),这也体现出Golang的简洁性
-
Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
-
go语言定义的变量或者import的包如果没有使用到,代码不能编译通过
- 定义一个变量,如果没有使用这个变量,就会编译通不过
- 大括号都是成对出现的,缺一不可
Go语言中的转义字符(escape char)
- 5个常用的转义字符
\t
一个制表位,实现对齐的功能\n
换行符\\
一个\\"
一个"\r
一个回车
- 案例
package main
import "fmt"
func main() {
//演示转义字符的使用 \t
fmt.Println("透明\t透明")
//换行符的演示 \n
fmt.Println("hello\ntom")
//引用路径,需要使用\转义“\”
fmt.Println("D:\\Golearn\\demo")
fmt.Println("tom说\"我爱你\"")
// \r 回车,从当前行的最前面开始输出,
//覆盖掉以前的内容
fmt.Println("我爱你\r亲爱的")
}
注意
- 如果我们在练习的时候出现在同一个文件夹下两个文件引用了两次func main(),会出现错误,因为,一个包下面不能重复,所以,我们可以重现创建一个文件夹,将文件放进去
Golang开发常见错误和解决方法
- 找不到文件
- 源文件名不存在,或者写错,或者当前路径错误
- 小提示
- 学习编程最容易犯的错是语法错误。Go要求你必须按照语法规则编写代码,如果你的程序违反了语法规则,例如:忘记了大括号、引号、或者拼错了单词,go编译器都汇报语法错误,
要求:尝试去看懂编译器会报告的错误信息
注释(Comment)
介绍
- 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性
- 注释是一个程序员必须都具有的良好的编程习惯,将自己的思想通过注释先整理出来,再用代码去体现
Go语言中的注释类型
- Go支持C语言风格的
/**/
块注释,也支持C++风格的//
行注释。行注释更通用,块注释主要用于针对包的详细说明或者屏蔽大块的代码 - 注释快捷键
- 行注释:
ctrl+/
:
– 第一次表示注释
– 第二次表示取消注释 - 块注释:
crtl+shift+/
:
– 第一次表示注释
– 第二次表示取消注释
– 块注释中不能再有块注释
Go规范的代码风格
正确的注释和注释风格
- Go官方推荐使用行注释来注释整个方法和语句
- 看go的源码,
go/src/
下的文件
正确的缩进和空白
- 使用一次Tab操作,实现缩进,默认整体向右移动,有时候用shift+tab整体向左移
- 或者使用gofmt来进行格式化
- 运算符两边习惯各加一个空格
- 比如:
2 + 4 * 5
- 行长约定
- 行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅
- 代码风格-Go设计者:一个问题尽量只有一个解决方案
- 正确的
package main
import "fmt"
func main(){
fmt.Println("hello,world")
}
- 错误的
package main
import "fmt"
func main()
{
fmt.Println("hello,world")
}
Golang官方编程指南
Golang官方网站
Golang官方标准库API文档
标准命令简述
- build
- 用于编译指定的代码或者Go语言源码文件。命令源码文件会被编译成可执行文件,并存放到命令执行的目录或者指定目录下。而库源码文件会被编译后,则不会在非临时目录中留下任何文件
- clean
- 用于清除因为执行其它go命令而遗留下来的临时目录和文件
- doc
- 用于显示Go语言代码包以及程序实体的文档
- env
- 用于打印Go语言相关的环境信息
- fix
- 用于修正指定代码包的源码文件中包含的过时语法和代码调用。这使得我们在升级Go语言版本的时候,可以非常方便得同步升级程学
- fmt
- 用于格式化指定代码包中得Go源码文件。实际上,它是通过执行gofmt命令来实现功能的
- generate
- 用于识别指定代码包中源码文件中的go:generate注释,并执行其携带的任意命令。该命令独立于Go语言标准的编译和安装体系,如果你有需要解析的go:generate注释,就单独运行它。这个命令非常有用,我常用它自动生成或者改动Go源码文件
- get
- 用于下载,编译或者安装指定的代码包以及其依赖包。从我们自己的代码中转站或者第三方代码库上自动拉取代码。就全靠它
- install
- 用于编译和安装指定的代码包及其依赖包。安装命令源码文件后,代码包所在的工作区目录的bin子目录,或者当前环境变量GOBIN指向的目录中会生成相应的可执行文件。而按章库源码文件后,会在代码包所在的工作区域目录的pkg子目录生成响应的归档文件
- list
- 用于显示指定代码包的信息,他可谓是代码包分析的一大便携工具。利用Go语言标准库代码包text/template中规定的模板语法,你可以非常灵活的控制输出的信息
- run
- 用于编译并运行指定的命令源码文件。当你想不生成可执行文件而直接运行命令源码文件时,就需要使用它
- test
- 用于测试指定的代码包,前提是该代码包目录中必须存在测试源码文件
- tool
- 用于执行Go语言的特殊工具
- vet
- 用于检查指定代码包中的Go语言源码,并报告发现可疑代码问题。该命令提供了除了编译意外的又一个程序检查方法,可以找到程序中的潜在错误
- version
- 用于显示当前安装go语言的版本信息以及计算环境
- 一些通用的标记
- -a
- 用于强行重新编译所有涉及的Go语言代码包(包括Go语言标准库中的代码包),即使它们已经是最新的了。该标记可以让我们有机会通过改动更底层的代码包来做一些实验
- -n
- 使命令仅打印其执行过程中用到的所有命令,而不是真正执行它们。如果只想查看或者验证命令过程,而不想改变任何东西,使用它正合适
- -race
- 用于检测并报告指定Go语言的程序中存在的数据竞争问题。当用Go语言编写并发程序时,这是很重要的检测手段之一
- -v
- 用于打印命令执行过程中涉及的代码包。这以一定包括我们指定的目标代码包,并且有时候还会包括改代码直接或者间接依赖的那些包。这会让你知道哪些代码包被命令处理过了。
- -work
- 用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它。这个目录下的文件可能会对你有用,也可以从侧面了解命令的执行过程,如果不添加此标记,那么临时工作目录会在命令执行完毕之前删除
- -x
- 使命令打印其执行过程中用到的所有命令,同时执行它们
- -a
- 好用的tool工具
- pprof
- 用于以交互的方式访问一些性能概要文件。命令会分析给定的概要文件,并根据要求提供高可读性的输出信息,这个工具可以分析的概要文件包括cpu概要文件、内存概要文件和程序阻塞概要文件,这些包含Go程序运行信息的概要文件,可以通过标准库代码包runtime和runtime/pprof中的程序来生成
- trace
- 用于读取Go程序踪迹文件,并以图形化的方式展示出来。它能够让我们深入了解Go程序在运行过程中的内部情况。比如,当前进程中堆的大小以及使用情况。又比如,程序中多个goroutine是怎么被调度的,以及它们在某个时刻被调度的原因。Go程序踪迹文件可以通过标准代码包runtime/trace和net/http/pprof中的程序来生成
- 工具说明
- 由于两个工具都受到go test命令的直接支持,因此我们可以很方便的把他们融入到程序测试过程中
持续更新,敬请关注–>
- 由于两个工具都受到go test命令的直接支持,因此我们可以很方便的把他们融入到程序测试过程中
- pprof