new 和make 切片和map

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)
}

posted @ 2025-09-17 16:53  风动随心  阅读(6)  评论(0)    收藏  举报