需求:开发一个hello.go程序,要求输出“hello world”。
采用VScode进行Golang的开发,因此这一系列博客的代码均在VScode编译器上编译实现。 这里我们就先了解一下在VScode里如何创建——编写——编译Go程序。
一、步骤
1. 编写源代码
注意:Go文件路径中不要出现中文或特殊字符。
在开发 Go 程序或者项目时,首先需要创建相应的目录结构,需要注意一点:我们在【Golang入门】一、搭建Go开发环境 中配置开发环境时,环境变量 GOPATH 的目录是 D:\Goproject,因此 go的目录结构 在该目录下进行创建。比如,在D:\Goproject\src 目录下创建 go_code 用于保存编写的 go 程序,然后创建 project01\main 文件夹,那么目录结构为:
相应的,VScode 中的目录结构为:
我们可以在创建好的 main 文件夹中创建 hello.go 程序,同时编写输出 “hello world” 的程序。关于该程序,做如下几点说明:
- go文件的后缀是 .go;
- package main: 表示 .go 文件所在的包是main**,go中的每个文件都必须归属于一个包;
- import “fmt”: 表示引入 fmt 包,目的是使用这个包里的函数;
- func main() { }:func关键字表示一个函数,main是函数名,是一个主函数,即程序的入口;
- fmt.Println(“xxx”):调用fmt包的函数 Println 输出 xxx。
2. 编译源代码
在 VScode 中编写好 go 程序之后,保存编写的程序,然后在所编写的 .go 文件所在路径下启动控制台。 通过 go build 命令编译 hello.go 文件,生成 .exe 文件:
3. 执行 .exe 文件
直接输入 hello.exe 就能够输出 “hello world!”:
还有一种方式是通过 go run 指令直接执行 hello.go,但是执行速度很慢。
4. 练习
需求:编写一个receive.go程序,输出“Your paper is received!”。 (还愿,整理笔记发布博客时,论文已被接收,只能说 芜湖~~~)
源代码:
// receive.go
package main
import "fmt" // fmt 包实现了类似C语言printf和scanf的格式化I/O
func main() {
fmt.Println("Your paper is received")
}
执行过程:
二、Golang执行流程分析
1. 先编译源码 .go,再执行 .exe
.go ⟶ go build .exe ⟶ run result \text{.go} \stackrel{\text{go build}}{\longrightarrow} \text{.exe} \stackrel{\text{run}}{\longrightarrow} \text{result} .go⟶go build.exe⟶runresult
2. 对源码直接执行go run源码
.go ⟶ go run result \text{.go} \stackrel{\text{go run}}{\longrightarrow} \text{result} .go⟶go runresult
3. 两种执行流程方式的区别
- 先编译生成可执行文件,该可执行文件在没有go 开发环境的机器上仍然可以运行;
- 直接利用** go run 执行源代码**,在另一个机器上运行时也需要 go 开发环境;
- 编译时,编译器将程序运行依赖的库文件包含在可执行文件中,导致 .exe文件很大 。
三、编译和运行说明
编译是指将源码翻译为机器可识别的二进制可执行文件的过程。 在源文件目录下,利用 go build 对 hello.go 文件进行编译,可以指定生成的可执行文件名,后缀为 .exe:
go build -o rename.exe hello.go
四、Go语法要求和注意事项
- Go源文件以 .go 为扩展名;
- Go应用程序的执行入口是 main() 方法;
- Go语言严格区分大小写;
- Go方法由一条条语句构成,语句后不需要分号 (Go语言在每行语句后自动添加分号);
- Go编译器一行一行进行编译,一行只能写一条语句,多条语句写在同一行时会报错;
- 定义的变量或者import的包没有使用,代码不能编译通过;
- 大括号成对出现,缺一不可。