Go_字典、字符串

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()
//
//
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值