Go语言了解
Go语言特点
谷歌出产的一个编程语言,特点如下:
1.高性能、高并发(不需要第三方库可实现高并发,只需要使用标准库或者任意基于标准库的第三方库)
2.语法简单、学习曲线平缓(类似c语言,但比c简练)
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收(类似Java,无需考虑内存的分配与释放)
使用Go语言的公司
Go语言在云计算、微服务、大数据、区块链、物联网等业务领域也在快速发展使用
Go入门
Go开发环境的配置
开发环境-先安装Golang语言:
安装网址:go.dev/ 使用镜像安装:studygolang.com/dl GitHub访问速度太慢可配置:goproxy.cn/
开发环境-配置Go的集成开发环境(配置Golang的编辑器或者IDE):可选Visual Studio Code或者GoLand(收费)
基础语法
大括号不能单独放在一行
Go 语言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串并赋值给新串:
- Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。
- Printf 根据格式化参数生成格式化的字符串并写入标准输出。
变量声明:
两种变量声明形式:“var vname type”或者“:=”,指定变量类型,如果没有初始化,则变量默认为零值。
- 数值类型(包括complex64/128)为 0
- 布尔类型为 false
- 字符串为 "" (空字符串)(字符串连接可通过+实现)
- 以下几种类型为 nil:
不声明类型时,可根据值自行判定变量类型。如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误
常量
常量定义格式: const identifier [type] = value type可以省略,编译器会根据值推断类型
if-else语句:if后面条件不加小括号,执行语句必须有大括号
循环:只有for循环
switch:可以使用任意的变量类型,且不需要break跳出
数组:长度固定Go 语言数组声明需要指定元素类型及元素个数,语法格式如下: var variable_name [SIZE] variable_type
切片:可变长度的数组,使用make创建切片,切片不需要说明长度
定义切片:可以声明一个未指定大小的数组来定义切片(如var numbers []int)或使用 make() 函数来创建切片( make([]T, length, capacity)其中capacity可省略不写 )
map:使用make创建map,Map是一种无序的键值对集合,可使用make或map关键字定义Map
/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType[, initialCapacity])
// 使用字面量创建 Map
m := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
// 遍历 Map
for k, v := range m {
fmt.Printf("key=%s, value=%d\n", k, v)
}
// 删除键值对
delete(m, "banana")
Range:Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对
函数定义:
func function_name( [parameter list] ) [return_types] {
函数体
}
类型转换格式为:
type_name(expression)
将一个字符串转换成另一个类型,可以使用以下语法:
var str string = "10"
var num int
num, _ = strconv.Atoi(str)
接口 Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。 /* 定义接口 */
method_name1 [return_type]
method_name2 [return_type]
method_name3 [return_type]
...
method_namen [return_type]
}
/* 定义结构体 */
type struct_name struct {
/* variables */
}
/* 实现接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
/* 方法实现 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
/* 方法实现*/
}
错误处理:error 类型是一个接口类型