Golang入门程序
前言
在执行GO语言时需要先安装一个SDK
Windows系统只需要下载对应版本的以.msi
后缀结尾的文件即可。安装完成后自动加入环境变量,不需要手动配置。
安装过程很简单本文就不在赘述。
安装完成后打开cmd查看是否安装成功
go version
一、第一个GO程序
需求:在控制台输出"Hello World!"
package main // 声明 main 包
import "fmt" // 导入 fmt 包,打印字符串时需要用到
func main() { // 声明 main 主函数
fmt.Println("Hello World!") // 打印 Hello World!
}
大家也许不明白这些代码的含义,没关系,下面就来一一介绍。
1.1 package(创建包)
Go语言以“包”作为管理单位,每个 Go 源文件必须先声明它所属的包,所以我们会看到每个 Go 源文件的开头都是一个 package 声明。
格式如下:
package name //package 是声明包名的关键字,name 为包的名字。
Go语言的包与文件夹是一一对应的,它具有以下几点特性:
- 一个目录下的同级文件属于同一个包。
- 包名可以与其目录名不同。
- main 包是Go语言程序的入口包,一个Go语言程序必须有且仅有一个 main 包。如果一个程序没有 main 包,那么编译时将会出错,无法生成可执行文件。
1.2 import(导入包)
在包声明之后,是 import 语句,用于导入程序中所依赖的包,导入的包名使用双引号""
包围,格式如下:
import "name" // import 是导入包的关键字,name 为所导入包的名字。
上方示例代码中导入了 fmt 包,这行代码会告诉 Go 编译器,我们需要用到 fmt 包中的函数或者变量等,fmt 包是Go语言标准库为我们提供的,用于格式化输入输出的内容(类似于C语言中的 stdio.h 头文件),类似的还有 os 包、io 包等。
另外有一点需要注意,导入的包中不能含有代码中没有使用到的包,否则Go编译器会报编译错误,例如 imported and not used: "xxx"
,"xxx" 表示包名。
也可以使用一个 import 关键字导入多个包,此时需要用括号( )
将包的名字包围起来,并且每个包名占用一行,也就是写成下面的样子:
import(
"name1"
"name2"
)
代码的第三行创建了一个 main 函数,它是Go语言程序的入口函数,也即程序启动后运行的第一个函数。
main 函数只能声明在 main 包中,不能声明在其他包中,并且,一个 main 包中也必须有且仅有一个 main 函数。
main 函数是自定义函数的一种,在Go语言中,所有函数都以关键字 func 开头的,定义格式如下所示:
func 函数名 (参数列表) (返回值列表){
函数体
}
格式说明如下:
- 函数名:由字母、数字、下画线
_
组成,其中,函数名的第一个字母不能为数字,并且,在同一个包内,函数名称不能重名。 - 参数列表:一个参数由参数变量和参数类型组成,例如
func foo( a int, b string )
。 - 返回值列表:可以是返回值类型列表,也可以是参数列表那样变量名与类型的组合,函数有返回值时,必须在函数体中使用 return 语句返回。
- 函数体:能够被重复调用的代码片段。
注意:Go语言函数的左大括号
{
必须和函数名称在同一行,否则会报错。
1.3 打印 Hello World
代码fmt.Println("Hello World!")
中,Println 是 fmt 包中的一个函数,它用来格式化输出数据,比如字符串、整数、小数等,类似于C语言中的 printf 函数。
这里我们使用 Println 函数来打印字符串,也就是( )
里面使用""
包裹的部分。
注意,Println 函数打印完成后会自动换行,ln是 line 的缩写。
另外,代码fmt.Println("Hello World!")
的结尾,不需要使用;
来作为结束符,Go 编译器会自动帮我们添加,当然,在这里加上;
也是可以的。
二、编译与运行
Go语言是编译型的静态语言(和C语言一样),所以在运行Go语言程序之前,先要将其编译成二进制的可执行文件。
可以通过Go语言提供的go build
或者go run
命令对Go语言程序进行编译:
-
go build
命令可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件; -
go run
命令则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序。
2.1 go build命令
go build
命令用来启动编译,它可以将Go语言程序与相关依赖编译成一个可执行文件,其语法格式如下。
go build fileName
- fileName:为所需要的参数,可以是一个或者多个 Go 源文件名(当有多个参数时需要使用空格将两个相邻的参数隔开),也可以省略不写。
使用 go build 命令进行编译时,不同参数的执行结果也是不同的。
(1)当参数不为空时
- 如果 fileName 为同一 main 包下的所有源文件名(可能有一个或者多个),编译器将生成一个与第一个 fileName 同名的可执行文件(如执行
go build abc.go def.go ...
会生成一个 abc.exe 文件); - 如果 fileName 为非 main 包下的源文件名,编译器将只对该包进行语法检查,不生成可执行文件。
(2)当参数为空时
- 如果当前目录下存在 main 包,则会生成一个与当前目录名同名的“目录名.exe”可执行文件(如在 hello 目录中执行
go build
命令时,会生成 hello.exe 文件); - 如果不存在 main 包,则只对当前目录下的程序源码进行语法检查,不会生成可执行文件。
附加参数
参数 | 备注 |
---|---|
-o | 指定编译后生成的文件名 |
-v | 编译时显示包名 |
-p n | 开启并发编译,默认情况下该值为CPU逻辑核数 |
-a | 强制重新构建 |
-n | 打印编译时会用到的所有命令,但不真正执行 |
-x | 打印编译时会用到的所有命令 |
-race | 开启竞态检测 |
2.2 go run 命令
除了使用go build
命令外,Go语言还为我们提供了go run
命令,go run
命令将编译和执行指令合二为一,会在编译之后立即执行Go语言程序,但是不会生成可执行文件。
go run
命令的语法格式如下:
go run fileName
其中 fileName 为所需要的参数,参数必须是同一 main 包下的所有源文件名,并且不能为空。
附加参数
参数 | 备注 |
---|---|
-a | 强制编译相关代码,无论编译结果是否是最新的 |
-n | 打印编译过程中所需运行的命令,但并不会真正执行它们 |
-x | 打印编译过程中所需运行的命令并执行 |
-p n | 并行编译,n为并行数量,通常为CPU逻辑核心数量 |
-v | 打印被编译的代码包名称 |
--work | 打印编译时创建的临时工作目录路径且不删除 |
三、执行代码
2.1 go build执行
(1)windows系统cmd窗口进入到main.go目录
D:\Go_Codes\base_demo\base01>go build main.go
在当前目录下生成一个main.exe
可执行文件。
在windows系统下执行生成main.exe文件,在Linux系统下执行生成main可执行文件,没有.exe
后缀。
(2)执行该文件
D:\Go_Codes\base_demo\base01>main.exe
Hello World!
注意:在执行main.exe时前面不需要加./
,否则会报错。
2.2 go run执行
D:\Go_Codes\base_demo\base01>go run main.go
Hello World!
没有生成可执行文件main.exe,直接输出结果。
转载自:https://juejin.cn/post/7151562123288510471