Go 语言基础
一、切片(Slice)
1、概述 Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
2、定义切片 var identifier []type 或者使用make()来创建切片 slice1 := make([]type, len, capacity) 其中len 是数组的长度并且也是切片的初始长度。其中 capacity 为可选参数
二、map
1、用法
m := make(map[string]int)
map中[key]value类型分别是string和int
2、遍历用rang
for k, v := range m{
fmt.Println(k, v) //数组同理
}
三、指针
go中也有指针,但是操作有限,主要用与传入参数修改。
Go 语言的取地址符是&,\
如何使用指针
指针使用流程:
- 定义指针变量。
- 为指针变量赋值。
- 访问指针变量中指向地址的值。
在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。 1、例子
var va
r_name *var-type
var ip *int /* 指向整型*/
var fp *float32 /* 指向浮点型 */
例子:
package main
import "fmt"
func main() {
var a int= 20 /* 声明实际变量 */
var ip *int /* 声明指针变量 */
ip = &a /* 指针变量的存储地址 */
fmt.Printf("a 变量的地址是: %x\n", &a )
/* 指针变量的存储地址 */
fmt.Printf("ip 变量储存的指针地址: %x\n", ip )
/* 使用指针访问值 */
fmt.Printf("*ip 变量的值: %d\n", *ip )
}
运行结果:
a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20
2、指向指针的指针
var ptr**int
package main
import "fmt"
//指向指针的指针
func main() {
var (
a int // 变量
ptr *int // 指针
pttr **int // 指针的指针
)
a = 2000 //变量赋值
ptr = &a //赋值a的地址
pttr = &ptr //赋值ptr的地址
fmt.Println("a的值", a)
fmt.Println("a的地址", &a)
fmt.Println("指针ptr指向的值", *ptr)
fmt.Println("指针pttr指向的值", *pttr)
fmt.Println("指针pttr的地址", &pttr)
fmt.Println("指针pttr指向指针ptr指向的值", **pttr)
}
运行结果
a的值 2000
a的地址 0xc000014098
指针ptr指向的值 2000
指针pttr指向的值 0xc000014098
指针pttr的地址 0xc000006030
指针pttr指向指针ptr指向的值 2000
四、结构体
可以将普通函数改成结构体的函数,让结构体使用。
func checkPassword(u user, password string) bool {
return u.password == password
}
改成
func (u user) checkPassword(password string) bool {
return u.password == password
}
就可以通过user.resetPassword("xxx")使用
有两种操作方法:
- 带指针。可以对结构体进行修改的。
- 不带指针。只是复制过来,不可以对结构体内的数据进行修改。