1. Go语言简介
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
Go语言介绍、历史
Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。
Go语言 vs C语言
Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。
在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。
Go语言 vs C++语言
Go语言与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。
Go 2.0版本将支持泛型,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。
Go语言 vs Java语言
不同于Java,Go内嵌了关联数组(也称为哈希表 Hashes 或字典 Dictionaries),就像字符串类型一样。
Go语言应用领域
服务器编程、开发云平台、区块链、分布式系统、网络编程
Go语言编译器
当前有两个Go编译器分支,分别为官方编译器gc和gccgo。官方编译器在初期使用C写成,后用Go重写从而实现自举。Gccgo是一个使用标准GCC作为后端的Go编译器。
官方编译器支持跨平台编译(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件。
2. Go语言安装开发环境
下载安装并配置环境变量:下载地址:https://golang.google.cn/dl/
这里注意,安装路径选择一个比较好找的路径,例如:E:\Environment\go,其他安装都选择”下一步“即可。
配置 go 语言环境变量
安装完成后,把E:\Environment\go\bin
目录添加到环境变量,这里就可以使用go了。
如果采用exe模式安装go语言的环境,是会自动配置环境变量的。
测试本地安装go版本
在命令行输入 go version 查看版本,输出结果如下所示。
C:\Users\HP>go version
go version go1.19.5 windows/amd64
go.exe 编译器 commands 命令参数
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
work workspace maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
go 环境 env 配置
go env -json:将环境变量键值对以json形式进行展示
C:\Users\HP>go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\HP\AppData\Local\go-build
set GOENV=C:\Users\HP\AppData\Roaming\go\env
······
go 语言 env 变量
env 变量 | 变量说明 |
---|---|
GO111MODULE | module模式开启,在包管理那篇文章有提到 |
GOBIN | 当我们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为GOPATH下的bin目录 |
GOPATH | 表示go的工作目录,这个目录指定了需要从哪个地方寻找GO的包、可执行程序等 |
GOCACHE | go缓存目录,可以使用 go clean -cache 清空,如果目录变得很大的话 |
GOENV | GO全局环境变量 |
GOMODCACHE | go mod进行包管理时的缓存目录,一般为GOPATH下的pkg下的mod目录,在包管理那篇文章有提到 |
GOOS | 当前操作系统 |
GOROOT | Go语言的安装目录 |
GOPROXY | 代理,在包管理那篇文章有提到 |
GOPRIVATE | go get通过代理服务拉取私有仓库(企业内部module或托管站点上的private库),而代理服务不可能访问到私有仓库,会出现了404错误,于是go1.13后有了这个变量设置 |
GOTOOLDIR | GO工具的安装目录,有cgo.exe等 |
GOVERSION | go的版本号 |
配置 Proxy 代理配置(阿里)
由于国内的网络环境,我们可以通过配置GOPROXY避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。
# Windows
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
# macOS 或 Linux
export GOPROXY=https://mirrors.aliyun.com/goproxy/
3. Goland开发者工具
开发者工具 Tool
链接:https://www.jetbrains.com/zh-cn/go/download/#section=windows
Goland 2023 Special Anniversary Edition
go 语言程序案例 hello world
package main
import "fmt"
func main() {
fmt.Printf("hello world")
}
运行结果:
GOROOT=E:\Environment\go #gosetup
GOPATH=C:\Users\HP\go #gosetup
E:\Environment\go\bin\go.exe build -o C:\Users\HP\AppData\Local\Temp\GoLand\___go_build_main_go.exe C:\Users\HP\GolandProjects\awesomeProject\main.go #gosetup
C:\Users\HP\AppData\Local\Temp\GoLand\___go_build_main_go.exe
hello world
Process finished with the exit code 0
vscode 安装 go
Windows平台按下 Ctrl+Shift+P,我们在这个输入框中输入>go:install,下面会自动搜索相关命令,我们选择Go:Install/Update Tools这个命令,然后安装所有的依赖包。
安装需要一定的时间,安装完之后重启即可。
main.go:1:1: expected ‘package’, found ‘EOF’
解决方案:按 ctrl+s 保存即可,要在编辑文本 按ctr+s
Vscode 快捷键
4. Go语言新建项目
早期的go项目使用gopath来管理项目,不方便而且容易出错,从golang 1.11 开始使用gomod管理项目,当然还有第三方模块例如govendor
go mod init mypro
基本流程:1.创建项目 2.初始化项目 3.创建包 4.创建模块 5.相互调用
go mod init 初始化
PS C:\Users\HP\Desktop\字节跳动Go语言\basic_learn_go> go mod init mypro
go: creating new go.mod: module mypro
go: to add module requirements and sums:
go mod tidy
Go 语言基本组成说明
属性 | 说明 |
---|---|
包声明 | 编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如package main。 |
引入包 | 其实就是告诉Go 编译器这个程序需要使用的包,如import "fmt"其实就是引入了fmt包。 |
函数 | 和c语言相同,即是一个可以实现某一个功能的函数体,每一个可执行程序中必须拥有一个main函数。 |
变量 | Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。 |
语句 / 表达式 | 在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。 |
注释 | 和c语言中的注释方式相同,可以在任何地方使用以 // 开头的单行注释。以 /* 开头,并以 */ 结尾来进行多行注释,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。 |
需要注意的是:标识符是用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母和数字、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
5. Go语言变量
定义变量
声明变量的一般形式是使用 var 关键字,具体格式为:var identifier typename
。
如下的代码中我们定义了一个类型为int的变量。
package main
import "fmt"
func main() {
var a int = 27
fmt.Println(a);
}
在go语言中定义了一个变量,指定变量类型,如果没有初始化,则变量默认为零值。零值就是变量没有做初始化时系统默认设置的值。
数值类型 0、布尔类型 false、字符串 “”(空字符串)
变量没有指定类型
在go语言中如果没有指定变量类型,可以通过变量的初始值来判断变量类型。如下代码
package main
import "fmt"
func main() {
var d = true
fmt.Println(d)
}