go语言初探 五

字典、 字符串
字典在C++里对应的是map类型。定义格式如下:
var m1 map[string]int
map是动态增长的。不能使用不能比较的元素作为字典的key。

字典的相关操作:

放值:
m3[“key1”] = “v1”

计算长度:
len(m3)

遍历:
for key, value := range m3 {
fmt.Println("key: ", key, " value: ", value)
}

删除:
delete(m3, “key1”)

我们还可以把函数作为值类型存入字典中:
func main() {
m := make(map[string]func(a, b int) int)
m[“add”] = func(a, b int) int {
return a + b
}
m[“multi”] = func(a, b int) int {
return a * b
}
fmt.Println(m[“add”](3, 2))
fmt.Println(m[“multi”](3, 2))
}

字符串
字符串是一种值类型,在创建字符串后其值是不可变的。
go里面的字符串修改很麻烦:可以将其转换为字节切片,再将其转换为字符串,但是也同样需要重新分配内存。

strconv
实现了基本类型与字符串之间的转换:
i, err := strconv.Atoi("-42") //将字符串转为int类型
s := strconv.Itoa(-42) //将int类型转为字符串

字符串拼接:
1.SPrintf
const numbers = 100

func BenchmarkSprintf(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var s string
for i := 0; i < numbers; i++ {
s = fmt.Sprintf("%v%v", s, i)
}
}
b.StopTimer()
}

2.+拼接
func BenchmarkStringAdd(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var s string
for i := 0; i < numbers; i++ {
s += strconv.Itoa(i)
}
}
b.StopTimer()
}

3.bytes.Buffer

func BenchmarkBytesBuf(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var buf bytes.Buffer
for i := 0; i < numbers; i++ {
buf.WriteString(strconv.Itoa(i))
}
_ = buf.String()
}
b.StopTimer()
}

4.strings.Builder拼接

func BenchmarkStringBuilder(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var builder strings.Builder
for i := 0; i < numbers; i++ {
builder.WriteString(strconv.Itoa(i))
}
_ = builder.String()
}
b.StopTimer()
}

go的语法是真的奇怪 读不通!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值