一.Go语言环境搭建
-
官方镜像站:https://golang.google.cn/dl/
-
-
安装好后打开cmd,输入:go version检查go语言版本
-
新建一个文件夹用来以后保存你自己的Go源代码
-
配置GPPATH:
1.
3.
-
找到系统变量,如果里面没有GOPATH,需要手动添加
注意:这里写的是你刚刚创建以后保存go源码时的路径
-
在新建的文件夹中再新建三个目录
- src :用来存放我们自己写的源代码
- pkg:编译的中间状态的包需要放在pkg中
- bin:可执行文件在这里
-
需要将bin目录也添加到环境变量中
将原先的bin更改为你所创建的目录路径
-
重新打开一个cmd 输入:go env, 是否会出现go的相关的环境变量
Go项目目录结构:
适合个人开发者:
因为源码是存放在GOPATH
的src
目录下,那我们可以按照下图来组织我们的代码。
目前流行的项目结构:
Go语言中也是通过包来组织代码文件,我们可以引用别人的包也可以发布自己的包,但是为了防止不同的包的项目名冲突,我们通常使用顶级域名
来作为前缀,这样就不用担心项目名冲突。
因为不是每个个人开发者都拥有自己的顶级域名,所以目前流行的方式是使用个人的github用户名来区分不同的包。
适合企业开发者
二.Go开发编辑器:
Go语言采用UTF-8编码的文本存放源代码,理论上使用任何一款文本编辑器都可以进行Go开发,推荐Vs Code
配置Vs Code
-
先将中文插件安装
-
安装Go扩展
-
安装插件失败可参考:https://blog.csdn.net/qqliuzhiwei/article/details/107452988
三.第一个Go语言程序
Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
编译:
在代码目录下执行:
go build
或者在其他目录下:
go build src后面的路径/项目目录名字
指定编译后的文件名:
go build -o 名字.exe
运行时报错:
go: go.mod file not found in current directory or any parent directory; see ‘go help modules’
打开cmd运行一下命令,重新go build即可
go env -w GO111MODULE=auto
执行
编译成功后会在项目目录下生成一个.exe可执行文件,直接在终端中输入可执行文件就可以运行
常用命令
go run 名字.go
可直接运行源代码.go文件
go install
执行两步:
- 编译
- 将.exe文件拷贝到bin目录
四.跨平台编译:
只需指定目标操作系统的平台和处理器架构即可:
SET CG0_ENABLED=0//禁用CGO
SET GOOS=linux //目标平台是linux
SET GOARCH=amd64 //目标处理器架构是adm64
go build
五.变量与常量:
所有的.go文件开头都要使用package来声明这个文件属于哪个包,例如:package main 这个.go文件属于main
package main
//导入语句
import "fmt"
//在func外面只能放变量,函数,常量,类型的声明
//程序的入口
func main() {
fmt.Println("Hello World")
}
标识符:
在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_
(下划线)组成,并且只能以字母和_
开头。 举几个例子:abc
, _
, _123
, a123
。
关键字:
Go语言中有25个关键字:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
此外,Go语言中还有37个保留字。
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
变量:
标准声明:
Go语言的标准声明格式为:
var 变量名 变量类型
变量声明以关键字var开头,变量类型放在变量的后面,行尾无需分号
eg:
var name string
var age int
var isOk bool
批量声明:
var(
name string
age int
isOk bool
)
变量的初始化:
func main() {
name = "张三"
age = 20
isOk = true
//在Go语言中非全变量声明了必须使用,不使用编译不过去
fmt.Print(name) //打印后不会换行
fmt.Printf("年龄:%d", age) //%s:占位符,使用age替换占位符
fmt.Println(age) //打印后会自动换行
fmt.Println(isOk)
}
也可以声明变量同时赋值:
var s1 string = "李四"
或一次初始化多个变量:
var name,age = "WW",20
类型推导:
根据值判断该变量是什么类型
var name,age = "WW",20
短变量声明:
在函数内部,可以使用更简洁的:=
方式声明变量,注意只能在函数里面使用
func main(){
s2 := "哈哈"
fmt.Print(s2)
}
匿名变量:
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)
。 匿名变量用一个下划线_
表示,例如:
func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在Lua
等编程语言里,匿名变量也被叫做哑元变量。)
注意事项:
- 函数外的每个语句都必须以关键字开始(var、const、func等)
:=
不能使用在函数外。_
多用于占位,表示忽略值。
常量:
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var
换成了const
,常量在定义的时候必须赋值。
const pi = 3.1415
const e = 2.7182
声明了pi
和e
这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。
多个常量也可以一起声明:
const (
pi = 3.1415
e = 2.7182
)
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同。 例如:
const (
n1 = 100
n2
n3
)
iota:
iota
是go语言的常量计数器,只能在常量的表达式中使用。
iota
在const关键字出现时将被重置为0。
const中每新增一行常量声明将使iota
计数一次(iota可理解为const语句块中的行索引)。
使用iota能简化定义,在定义枚举时很有用。
举个例子:
const (
n1 = iota //0
n2 //1
n3 //2
n4 //3
)
常见iota:
使用_
跳过某些值
const (
n1 = iota //0
n2 //1
_
n4 //3
)
iota
声明中间插队
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0
定义数量级 (这里的<<
表示左移操作,1<<10
表示将1的二进制表示向左移10位,也就是由1
变成了10000000000
,也就是十进制的1024。同理2<<2
表示将2的二进制表示向左移2位,也就是由10
变成了1000
,也就是十进制的8。)
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)
多个iota
定义在一行
const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)