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



