1. 字典
同java中的map,key-value键值对数据结构。
//初始化字典
hash := make(map[int]string,100)
hash1 := map[string]int{"key1":1,"key2":2}
hash2 := map[string]interface{}{"a":123}//类似map<String,Object>
//字典操作
hash["key1"] = "v1"
hash["key2"] = "v2"
hash["key2"] = "v3" //key相同时 value 会被替换调,已最后一次插入为准
len(hash) //获取字典长度
//如果不确定 key 是否存在字典中,ok 是一个bool 存在true,不存在false
if value,ok := hash["name"];ok{
fmt.Println(value)
}
//遍历map,map是无序的所以每次输出结果不同
for key, value := range hash{
fmt.Println("key:",key,"value:",value)
}
//删除操作
delete(hash,"key")
//还可以声明值类型为切片的字典以及字典类型的切片等等
m := make(map[string]func(a, b int)int)
m["addFc"] = func(a,b,int)int{
return a+b;
}
fmt.Prinfln(m["add"](1,2))
在定义字典时不需要为为其指定容量,因为map是动态扩容的,注意不能使用不能比较的元素作为字典的key:如 数组,切片等。而value 可以是任意类型的,如果使用interface{} 作为value类型,value 就可以接受任意类型,使用时可以使用类型断言来判断具体类型。
2.字符串
字符串是一种值类型呢,在创建字符串之后其值是不可变的。
//禁止以下操作
s := "hello"
s[0] = 'a'
//如果想要修改一个字符串的内容,可以借助切片(不支持处理中文)
s := "hello"
b := []byte(s)
b[0] = 'g'
s = string(b)
fmt.Println(s)
//在go语言中字符串都是以utf-8的编码格式进行存储的,所以每个中文占三个字节
//一种是byte 的字节类类型( byte 是uint 的别名〉
//另一种是表示Unicode 编码的字符runeo rune 在Go 内部是int3 2 类型的别名, 占用4 个字节。Go
len(s) //获取字符串长度
utf8.RuneCountInString(s)//获取中文字符长度
//处理中文切片
r := rune(s)
for i:=0; i<len(r); i++{
fmt.Printf("%c",r[i])
}
//strings 工具包
//判断字符串开头
strings.HasPrefix(str,'S')
//判断字符串结尾
strings.HasSuffix(str,'E')
//是否包含字符串
strings.Contains(str,'test')
//strconv 字符转换工具包
i, err := strconv.Atoi("-42") //将字符串转成int类型
s, err := strconv.Atos(-42)// 将int类型转成string类型
//若转换失败则返回对应的error值。
//字符串拼接 Sprintgf
var s string
s = fmt.Sprintf("1")
//字符串拼接 +
var s string
s += strconv.Itoa(1)
//字符串拼接 bytes.Buffer
var buf bytes.Buffer
buf.WriteString(strconv.Itoa(1))
_ = buf.String()
//strings.Builder拼接(最快)
var builder strings.Builder
builder.WriteString(strconv.Itoa(i))
_ = builder.String()
//
//