make和new都是用来申请内存的new 一般很少用,一般用于给基本的数据类型申请内存,如stringint等,返回对应类型的指针。make是用来给slice、map、chan申请内存的,make返回的是对应的这三个类型的本身。
package main import "fmt" //vscode 不支持go module func main() { //Go语言中不存在指针 *** 作,只需要记住两个符号 1.&取地址 2.*根据地址取值 a := 18 p := &a b := a fmt.Printf("%pn",&a) fmt.Printf("%pn",&b) fmt.Printf("%Tn",p) //根据地址取值 m := *p fmt.Println(m) //var s *int //nil pointer //*s = 100 //空指针没有内存地址,无法赋值 //new函数申请一个内存地址 var s = new(int) *s = 100 //空指针没有内存地址,无法赋值 fmt.Println(*s) }map集合
package main import "fmt" func main() { //map 是一种无需的基于key-value的数据类型,Go语言中的map是引用类型,必须初始化才能使用 var m1 map[string]int //map未初始化无法使用(没有在内存中开辟空间内存) m1 = make(map[string]int,10) //初始化时要估算好map容量,避免在程序运行期间再动态的扩容 m1["name"] = 123 m1["age"] = 20 fmt.Println(m1["age2"]) //如果不存在key,拿到对应值类型的0值 value, ok := m1["name2"] if !ok { fmt.Println("查不到") }else{ fmt.Println(value) } //map的遍历 for _, v :=range m1{ fmt.Println(v) } //删除 如果删除一个不存在的键值,啥也不干 delete函数是没用返回值的 delete(m1,"name") fmt.Println(m1) }
package main import ( "fmt" "math/rand" "sort" "time" ) func main() { rand.Seed(time.Now().UnixNano()) //初始化随机数种子 var scoreMap = make(map[string]int, 200) for i := 0; i < 100; i++ { key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串 value := rand.Intn(100) //生成0~99的随机整数 scoreMap[key] = value } fmt.Println(scoreMap) //取出map中的所有key存入切片keys var keys = make([]string, 0, 200) for key := range scoreMap { keys = append(keys, key) } fmt.Println(keys) //对切片进行排序 sort.Strings(keys) //按照排序后的key遍历map for _, key := range keys { fmt.Println(key, scoreMap[key]) } }
package main import ( "fmt" "strings" ) //map和slice组合 func main() { //元素类型为map的切片 var s1 = make([]map[int]string,10,10) //没有对内部的map进行初始化 s1[0] = make(map[int]string,1) s1[0][100] = "A" fmt.Println(s1) //值为切片类型的map var m1 = make(map[string][]int,10) m1["北京"] = []int{1,2,3} fmt.Println(m1) var hellow = "how do you do yes is you do to how to you" data := strings.Split(hellow," ") //定义一个map data2 := make(map[string]int,10) for _,v := range data{ value, ok := data2[v] //判断是否存着,不存在集合中添加一个元素,存在+1 if !ok { data2[v] = 1 }else{ data2[v] = value + 1 } } fmt.Println(data2) }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)