需求:开发一个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” 的程序。关于该程序,做如下几点说明:

  1. go文件的后缀是 .go;
  2. package main: 表示 .go 文件所在的包是main**,go中的每个文件都必须归属于一个包;
  3. import “fmt”: 表示引入 fmt 包,目的是使用这个包里的函数;
  4. func main() { }:func关键字表示一个函数,main是函数名,是一个主函数,即程序的入口;
  5. 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⟶run​result

2. 对源码直接执行go run源码

.go ⟶ go run result \text{.go} \stackrel{\text{go run}}{\longrightarrow} \text{result} .go⟶go run​result

3. 两种执行流程方式的区别

  1. 先编译生成可执行文件,该可执行文件在没有go 开发环境的机器上仍然可以运行
  2. 直接利用** go run 执行源代码**,在另一个机器上运行时也需要 go 开发环境
  3. 编译时,编译器将程序运行依赖的库文件包含在可执行文件中,导致 .exe文件很大

三、编译和运行说明

编译是指将源码翻译为机器可识别的二进制可执行文件的过程。 在源文件目录下,利用 go build 对 hello.go 文件进行编译,可以指定生成的可执行文件名,后缀为 .exe:

go build -o rename.exe hello.go

四、Go语法要求和注意事项

  1. Go源文件以 .go 为扩展名
  2. Go应用程序的执行入口是 main() 方法;
  3. Go语言严格区分大小写
  4. Go方法由一条条语句构成,语句后不需要分号 (Go语言在每行语句后自动添加分号)
  5. Go编译器一行一行进行编译,一行只能写一条语句多条语句写在同一行时会报错
  6. 定义的变量或者import的包没有使用,代码不能编译通过
  7. 大括号成对出现,缺一不可。