【声明】
非完全原创,部分内容来自于学习其他人的理论和B站视频。如果有侵权,请联系我,可以立即删除掉。
一、Go语言简介
1、 发展史
2009年11月10日,Go语言正式发布,它是一种强静态类型、编译型语言,它专对多处理器系统应用程序的编程进行了优化,对于对于高并发,多线程的开发场景具有天然的优势
1.1 优势
- 可以直接编译成机器码,不依赖其他库
- 丰富的标准库,特别是网络库非常强大
- 内置runtime,支持垃圾回收
1.2 应用场景
- 服务器编程,例如处理日志、数据打包、虚拟机处理、文件系统等
- 网络编程,包括Web应用、API应用、下载应用
- 内存数据库,如google开发的groupcache,couchbase的部分组建
- 云平台,例如现目前很火爆的k8s 也是利用go语言进行开发完成
- 分布式系统,数据库代理器等
二、环境搭建
1、 安装Go语言
1.1 下载安装包
官网下载网址: https://www.golangtc.com/download
国内下载地址: https://studygolang.com/dl
中文在线文档: https://studygolang.com/pkgdoc
1.2 win版本安装
一般有zip压缩包和msi的安装方式:
- zip解压就可以使用,但是需要自行配置go语言环境
- msi安装之后,会自动设置环境变量
安装的路径中不应该有中文,否则会导致程序找不到路径
1.3 确认安装成功
进入命令提示符,敲go version
和go env
能够显示go语言安装的信息,则表示安装成功
2、 go语言标准命令
安装了go语言之后,就直接可以使用其标准命令来处理Go语言代码,常见的go语言代码的命令和工具有:
build:用于编译给定的代码包或Go语言源码文件及其依赖包。
clean:用于清除执行其他go命令后遗留的目录和文件。
doc:用于执行godoc命令以打印指定代码包。
env:用于打印Go语言环境信息。
fix:用于执行go tool fix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。
fmt:用于执行gofmt命令以格式化给定代码包中的源码文件。
get:用于下载和安装给定代码包及其依赖包(提前安装git或hg)。
list:用于显示给定代码包的信息。
run:用于编译并运行给定的命令源码文件。
install:编译包文件并编译整个程序。
test:用于测试给定的代码包。
tool:用于运行Go语言的特殊工具。
version:用于显示当前安装的Go语言的版本信息。
3、 安装IDE
go语言安装包安装之后,编译代码时,需要通过命令提示符进入代码所在路径下进行编译,不方便代码的管理。为了便于开发,一般需要选择一款开发工具,常见的有:
- LiteIDE:一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)
- eclipse:需要下载插件
- Goland:由 JetBrains 公司开发的一个新的商业 IDE,提供了针对Go语言的编码辅助和工具集成。
一般来说,使用免费的liteIDE可以满足日常使用,下载网址:http://liteide.org/cn/。windows版本直接安装即可。
4、 go语言的Hello world
如下,是go语言版本的Hello World。由于此处只有一个go文件,因此文件的开头package必须声明一个main的包名,并且在该包中包含一个叫main()的函数作为go语言可执行程序的起点。
//HelloWorld.go
package main
import ("fmt")
func main() {
fmt.Println("Hello World")
}
在package声明了包名之后,需要使用import导入程序所依赖的包,比如本例中的Println
所属的包就是fmt
。
接下来就是函数部分。go语言的函数都需要使用关键字func
开头,main
函数不能带参数,也不能定义返回值。
进入到对应的目录下即可编译和运行
三、Go语言基础知识
1、 命名
命名规则:必须以一个字母或下划线开头,后面可以跟任意数量的字母、数字或下划线,且不能与关键字重名。命名的规则和C语言、Java一样。
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 |
另外还有30多个预定义的名字:
内建常量:
true false iota nil
内建类型:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内建函数:
make len cap new append copy close delete
complex real imag
panic recover
2、 变量
变量是程序运行期间可以改变的量,相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。
2.1 变量的声明
Go语言使用关键字var
来声明变量。而C、Java等语言中直接使用类型 变量名
的方式声明变量。
//定义单个变量
var v1 int
//同时定义多个变量:只能同一种类型
var v2, v3 int
//同时定义多个变量:变量可以不同类型
var (
v4 int
v5 bool
)
2.2 变量初始化
初始化时, var
关键字在:=
自动推导初始化时不需要写出,如下:
package main
import (
"fmt"
"reflect"
)
func main() {
var v1 int = 1 // 普通初始化的方式
var v2 = 2 // 编译器自动推导类型的初始化方式
v3 := 3 //编译器自动推导类型的初始化方式:不用写var关键字
v4 := 4.0
v5 := false
fmt.Println("v3 type is ", reflect.TypeOf(v3))
fmt.Println("v4 type is ", reflect.TypeOf(v4))
fmt.Printf("v5 type is %T\n", v5)
fmt.Printf("v1+v2 type is %T\n", v1+v2)
}
注意:var v1 int
与v1:=1
不能同时使用,否则会报错;因为:=
左侧的变量必须是未声明的
2.3 变量赋值
go语言赋值类似于python,可以多重赋值,如下:
var v1 int = 1 //初始化时赋值
//先声明后赋值
var v2, v3, v4 int
v2 = 2
v3