4、字符串转换优化时可能碰到的坑
通过前面讨论的字符串的可变性的方法,咱们可以知道 , 很多时候,[]byte到字符串的转变,可以直接构造其结构 , 而共享数据,从而达到减少数据内存copy的方式来进行优化 , 再使用这些优化的时候,一定需要注意 , 字符串或者数组的生命周期,是否会存在被改写的情况,从而导致前后不一致的问题 。
比如下面这段代码:
大家可以猜想一下,这个最后里面的数据mmp中,"test"的value是多少,"abcd"的value是多少,然后想想为什么,且等端午之后,再来分解
如何学好一门编程语言? 学好一门编程语言是十分不容易的 , 但是如果学会了,它的实用性是很强的 , 下面我为大家整理了学好一门编程语言的办法,大家可以参考借鉴 。
如何学好一门编程语言?
一、多总结
多总结才能加深理解、增强记忆 。举例,Go 中有 slice、map、channal 类型,它们都可以用 make 生成实例,但 slice 和 map 还可以用以下形式初始化,也是编程规范中建议的初始化方式:
colors := map[string]string{}
slice := []int{}
但注意了,channal 则没有这样的语法:msg := chan string{}
上面两句是生成实例,表示空集合 , 但下面两句则表示实例不存在,值为 nil
var colors map[string]string
var slice []int
另外 , 结构体指针 slice 还可以象下面这样初始化,结构体实例不用明确地指定类型(使用了类型推导)、不用明确地取地址运算() 。
type Product struct {
name string
price float64
}
products := []*Product{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}
看到没有,如果不经常总结,这一圈学下来会把你整的稀里糊涂的 。
二、多比较
学一门新语言一定要与你之前已经熟悉的语言经常作比较 , 找出它们的相同与不同,这样才能加深记忆和理解,否则学完之后脑子里会一片混乱,搞不清谁是谁非了 。
就拿数组来说吧,在 Java、Scala、Go 中定义、实例化、赋值是不一样的 。
//Java
int[] arr;//定义数组,不可以指定数组长度
arr = new int[5];//创建数组对象(实例化),指定数组长度
arr[1] = 8;//赋值
//Scala
val arr = new Array[Int](5) //数组在Scala里用的是泛型类,构造函数参数指定数组大小
arr(1) = 8 //赋值,注意用的是括弧
//Go
arr := [5]int{} //创建数组,初始化5个元素都为0,注意如果不指定数组长度,则是另外一种类型Slice
arr[1] = 8 //赋值
再比如 Map 在 Scala 与 Go 语言里定义、初始化、访问也是不同的,作了以下比较后印象会非常深刻 , 把它们记下来,这样以后使用就不会搞混了 。
//Scala
val capital = Map("France" - "Paris", "Japan" - "Tokyo")
println(capital.get("France"))
//Go
capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}
fmt.Println(capital["France"])
Go 同时给多个变量赋值在 Scala 里可以用模式匹配做到 , 如下:
//Scala(使用样本类的模式匹配)
case class Tao(name: String, age: Int);
val Tao(myName, myAge) = Tao("taozs", 18);
println(myName)
println(myAge)
//Go
myName, myAge := "taozs", 18
fmt.Println(myName)
fmt.Println(myAge)
//Scala(使用元组的模式匹配)
val (myNumber, myString) = (123, "abe")
println(myNumber)
println(myString)
//Go
myNumber, myString := 123, "abe"
fmt.Println(myNumber)
fmt.Println(myString)
推荐阅读
- sqlserver存储过程弹出提醒,sqlserver存储过程debug
- mac电脑怎么安装mongodb,mac安装mongodb全过程
- 宽带电视打不开怎么办,宽带电视开不了
- 华为手机鸿蒙邀请码是多少,华为鸿蒙os20邀请码
- 小米带硬盘路由器怎么登录,访问小米路由硬盘
- 口才视频号名字怎么取,口才视频号名字怎么取好听
- php数据库连接留言板 php8连接数据库
- c语言3x3矩阵转置是什么意思,c语言4x4矩阵转置
- 宠物换装冒险游戏下载,宠物装扮游戏