golang中map与slice的区别

本文探讨了Golang中map与slice的主要区别。map作为一种无序的数据结构,其键可以是多种类型,而不仅仅是int。与slice不同,map无法通过索引访问,而是依赖键进行操作。map的长度可变,且使用len函数获取键的数量。同时,map的修改直接作用于底层数据,这意味着多个引用会同步变化。初始化与检查键的存在是map的重要特性。而new和make的区别在于,new返回类型T的零值指针,而make则用于初始化slice、map和channel并直接返回已初始化的值。
摘要由CSDN通过智能技术生成
package main

import "fmt"

func main() {
	var numbers map[string]int
	numbers = make(map[string]int)
	numbers["one"] = 1
	numbers["ten"] = 10
	numbers["three"] = 3
	fmt.Println(numbers["three"])
	fmt.Println(numbers["one"])
	fmt.Println(numbers["ten"])
	fmt.Println(numbers)
	numbers["three"] = 9
	fmt.Println(numbers["three"])
}

map 字典的概念,格式为map[keyType]valueType

map的读取和设置也类似slice一样,通过key来操作,这是slice的index只能是int,而map多了很多类型,可以是int,string以及所有完全定义了==于!=操作的类型

map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取

map的长度是不固定的,也就是和slice一样,也是一种引用类型

内置的len函数同样适用于map,返回map拥有key的数量

 map的值修改numbers["three"]= 9

如果是数组就需要转成切面,map就可以直接修改

map的初始化可以通过key:val的方式初始化值,同时map内置有判断是否存在key的方式

map也是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变

m := make(map[string]string)

m["hello"] = "bonjour"

m1 := m

m1["hello] = "salut"

此时m["hello"]的值也发生改变了

make 用于内建类型(map,slice,channel)的内存分配,new用于各种类型的内存分配

内建函数new本质上说跟其他语言中的同名函数功能一样,new(T)分配了零值填充的T类型内存空间,并且返回其地址,即一个*T类型的值,用GO术语说,他返回了一个指针,指向新分配的类型T的零值。

内建函数make(T,args)与new(T)有着不同的功能,make只能创建slice,map,channel并且返回一个有初始值的T类型,而不是*T,本质讲,导致三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值