func NewCase() {
// 通过new , 可以创建任意类型,并返回指针
mpPtr := new(map[string]*user)
if *mpPtr == nil { // 通过 * 获取指针内容
fmt.Println("map 为空")
}
// slice
slicePtr := new([]user)
if *slicePtr == nil {
fmt.Println("slice 为空")
}
*slicePtr = append(*slicePtr, user{Name: "nick", Age: 18})
userPtr := new(user)
strPtr := new(string)
userPtr = &user{
Name: "tom",
}
fmt.Println(mpPtr, slicePtr, userPtr, strPtr) // 返回地址空间
}
map 为空
slice 为空
&map[] &[{nick 18 { }}] &{tom 0 { }} 0xc0000220a0
// MakeCase make 仅用于切片\集合\通道的初始化
func MakeCase() {
// 初始化切片.并设置长度和容量
slice := make([]int, 10, 20)
slice[0] = 10
// 初始化集合,并设置集合的初始大小
mp := make(map[string]string, 10)
mp["A"] = "a"
// 初始化通道,设置通道的读写方向和缓冲大小
ch := make(chan int, 10)
ch1 := make(chan<- int, 10)
ch2 := make(<-chan int)
fmt.Println(slice, mp, ch, ch1, ch2)
}
func SliceAndMapCase() {
// 定义切片
var slice []int
slice = []int{1, 2, 3, 4, 5}
slice1 := make([]int, 10)
slice1[1] = 10
fmt.Println("----slice1-----")
fmt.Println(slice, slice1)
// 切片的截取
slice2 := make([]int, 5, 10)
fmt.Println("----slice2-----")
fmt.Println(len(slice2), cap(slice2), slice2) // 长度和容积
slice2[0] = 0
slice2[1] = 1
slice2[2] = 2
slice2[3] = 3
slice2[4] = 4
// 切片的截取
slice3 := slice2[1:10]
fmt.Println("----slice3-----")
fmt.Println(len(slice3), cap(slice3), slice3) // 长度和容积
// 切片的附加数据
fmt.Println("----切片的附加数据-----")
slice3 = append(slice3, 1, 2, 3, 4, 5, 6, 7)
fmt.Println(len(slice3), cap(slice3), slice3) // 长度和容积
// 集合、无序
fmt.Println("----map 集合、无序 -----")
mp := make(map[string]string, 10)
mp["A"] = "a"
mp["B"] = "b"
mp["C"] = "c"
mp["D"] = "d"
fmt.Println(mp)
for k, v := range mp {
fmt.Println(k, v)
}
// 删除集合
delete(mp, "B")
fmt.Println(mp)
}