Go to Rust - String
通过golang和rust代码对比快速学习rust(2)- 字符串
1. 字符串类型定义
Golang 中只有一个 string类型,对应字符串。
string是所有8位字节的字符串的集合,通常但不一定代表UTF-8编码的文本。一个字符串可以是空的,但不能是零。字符串类型的值是不可改变的。
Rust 中有三个类型 str ,&str ,String 来对应处理字符串。
str类型,也被称为 “字符串切片”,是最原始的字符串类型。它通常以其借用的形式出现,即&str。它也是字符串字面的类型,&’static str。字符串切片总是有效的UTF-8。
&str类型是两个主要的字符串类型之一,另一个是String。与其对应的String不同,它的内容是借用的。
String类型是一个UTF-8编码的、可增长的字符串。
String类型是最常见的字符串类型,它对字符串的内容有所有权。它与它的借来的对应物,即原始的str,有着密切的关系。
2. 个人理解
Golang中字符串只用stirng处理,实际存储的是byte数组。type byte = uint8,也就是uint8数组不可变。要对字符串做遍历直接就可以用索引。如果要变更长度,需要使用strings包的Split,Join等函数修改并返回一个新的字符串。
Rust中字符串是str,实际存储的是u8数组不可变,以&str获取u8数组的切片来访问,遍历。要对字符串做增长修改操作,需要转换成String处理。
Golang中对字符串的拆分,组合字符串,通过包strings处理。Rust中通过把字符串转成String实际是pub struct String { vec: Vec
,}结构,是一个处理字符串的对象,它附带了很多处理字符串的方法函数。但是它不是字符串。Rust的String对象等价于Go中的包strings。
(作为一个Golang开发者学习Rust,非常容易把Rust的String 等价于 Golang中的string 这是个错误。)
3. 我的困惑:
Rust中对String的说明太让人难以理解了:
原文:
A UTF-8–encoded, growable string.
The String type is the most common string type that has ownership over the contents of the string. It has a close relationship with its borrowed counterpart, the primitive str.
建议应该改成
An object that performs growth processing on UTF-8 encoded strings.
The String object is the most common set of string growth processing methods, and it has ownership over the content of the string. It has a close relationship with its borrowed counterpart, the original str. It can do splitting, combining, and growing of strings to return a new string.
4. 比较代码
通过代码比较更容易理解Golang和Rust对字符串处理的差异。代码如下:
Golang 代码
package main |
output:
Hello, 世界 |
Rust 代码
fn main() { |
output:
Hello, 世界 |
本文标题:Go to Rust - String
文章作者:[email protected]
发布时间:2021-09-30
最后更新:2021-09-30
原始链接:https://www.ffactory.org/2021/09/30/go-to-rust-string/
版权声明:作者拥有版权,请注明出处转载
分享