go语言的基础知识2

Go语言的4个内置容器: 数组、切片、map(sync map)、list
以及new和make的区别


//-- Go语言知识点六、Go语言内置的容器数组、切片(动态变化的数组)、列表、字典、以及make和new的区别
func GoContainer() {
	// 数组初始化的三种方式
	var shuzu [3]string = [3]string{"sd", "ds", "dss"}
	var shuzu1 = [3]string{"sd", "ds", "dss"}
	// 数组的赋值
	shuzu[0] = "s"
	fmt.Println("reflect.TypeOf(shuzu)=", reflect.TypeOf(shuzu))

	//-- 数组遍历
	for i := 0; i < len(shuzu); i++ {
		fmt.Println(shuzu[i])
	}
	//-- 循环遍历数组
	for _, v := range shuzu {
		fmt.Println(v)
	}

	//-- 数组的比较
	if shuzu == shuzu1 {
		println("两个数组相等")
	}

	//-- 创建切片,(作为函数的参数,类似引用本身,而不是go语言传入数组的拷贝), 指针类型,因为切片是动态变化的数组,所以可以将其动态变化,切片除了长度属性还有一个容量属性。
	//-- 指定数组创建切片
	var sliceSrc = []string{"sd", "ds", "dss"}
	fmt.Println("reflect.TypeOf(qiepian1)=", reflect.TypeOf(sliceSrc))
	//-- make创建切片
	var sliceDst []string = make([]string, 2, 3)
	fmt.Println("sliceDst=", sliceDst)
	//-- 可以使用 append 函数加上切片索引的形式实现在切片的任意位置插入元素。也可以用append变相删除元素。
	//-- Go语言切片的复制
	copy(sliceDst, sliceSrc)
	fmt.Println("sliceDst=", sliceDst)
	//-- 切片的长度和容量
	fmt.Println("len(sliceDst)=", len(sliceDst))
	fmt.Println("cap(sliceDst)=", cap(sliceDst))

	//-- Go语言中map 如果在并发读的情况下是线程安全的,如果在并发写的情况下,则是线程不安全的。
	//--map 无序的: 无序的集合,也可以称为关联数组或字典,Golang 中的 map 能够快速根据给定 key,找到对应的 value 的数据结构。
	//使用 TypeOf() 函数,获取map类型
	herosMap := map[string]string{
		"hero1": "宋江",
		"hero2": "卢俊义",
		"hero3": "吴用",
	}
	fmt.Println("hero4", herosMap["hero4"])
	herosMap["NotExist"] = "mmp"
	value, isOk := herosMap["hero1"]
	fmt.Println("Value = ", value, " isOk = ", isOk)
	fmt.Println(reflect.TypeOf(herosMap))
	//-- 循环遍历map
	for key, value := range herosMap {
		fmt.Println(key, value)
	}
	//--删除map中的元素
	delete(herosMap, "NotExist")

	//--  Golang 为我们提供了一个 sync.Map 是并发写安全的。map 的 key 和 value 的 类型 必须是一致的,但 sync.Map 的 key 和 value 不一定是要相同的类型,不同的类型也是支持的。
	//--  存储、加载、删除数据
	var mapHaiCoder sync.Map
	mapHaiCoder.Store("Server", "Golang")
	mapHaiCoder.Store("JavaScript", "Vue")
	mapHaiCoder.Store("Db", "Redis")
	fmt.Println(mapHaiCoder)
	value2, _ := mapHaiCoder.Load("Server")
	fmt.Println("Value =", value2)
	mapHaiCoder.Delete("Db")
	//-- sync Map的遍历
	mapHaiCoder.Range(walk)
	//Go 语言中 sync.Map 的 LoadOrStore 函数表示,如果我们获取的 key 存在,那么就返回 key 对应的元素,如果获取的 key 不存在,那么就返回我们设置的值,并且将我们设置的值,存入 map。
	mapHaiCoder.LoadOrStore("ServerData", "ServerData")
	mapHaiCoder.LoadOrStore("JavaScriptData", "JavaScriptData")
	fmt.Println(mapHaiCoder.LoadOrStore("ServerData", "ServerData"))
	mapHaiCoder.Range(walk)

	//-- Go语言中的list
	//通过 list.New 创建列表
	listHaiCoder := list.New()
	listHaiCoder.PushBack("Hello")
	listHaiCoder.PushBack("HaiCoder")
	fmt.Println(listHaiCoder)
	//使用var关键字初始化列表
	var listHaiCoder2 list.List
	listHaiCoder2.PushBack("Hello")
	listHaiCoder2.PushBack("HaiCoder")
	fmt.Println(listHaiCoder2)
	//list列表的插入节点、删除节点、遍历列表、移动节点、获取元素节点。获取列表的长度。

	//--  go语言new和make的区别
	//Go语言的new和make都是go语言的内置函数,主要用来分配内存的。
	// new与make的区别是new只分配内存,而make只能用于分配和初始化slice、map、channel 的数据。
	// new分配返回的是指针,即类型 *Type. make返回的是引用,即 Type
	// new分配的空间会清零,make分配空间后会进行初始化。

}
func walk(key, value interface{}) bool {
	fmt.Println("key=", key, "value", value)
	//return false 终止遍历
	return true // 一直遍历到底
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值