go语言中的string类型简介

在 Go 中,String 是一种不可变的类型,不能被修改。

在 Go 语言中,字符串由 Unicode 字符组成,每个字符都可以用一个或多个字节来表示。我们使用双引号或反引号来定义字符串,使用反引号定义的字符串不会对其内容进行任何的转义(例如文本中包含 \n时并不会进行转义)

s1 := "hello, world\n"
fmt.Print(s1)

// 使用反引号定义的原生字符串
s2 := `hello, world\n`
fmt.Print(s2)

// 使用反斜杠进行转义
s3 := "C:\\Windows\\System32\\"
fmt.Print(s3)

常见的字符串操作有:

  1. 获取长度:内置函数 len()
  2. 拼接:加号运算符 +fmt.Sprintf() 格式化
  3. 截取:切片操作
  4. 遍历:for 循环与 range 关键字
  5. 比较:比较运算符 ==、!=、<、<=、>、>=

以下是一个示例代码,演示了如何在 Go 语言中定义和使用字符串类型:

var str1 string = "Hello"
var str2 string = "world"
// 获取长度
fmt.Println(len(str1))
// 拼接
var str3 string = str1 + " " + str2
// 截取
fmt.Printf("str3[1:4]: %s\n", str3[1:4])
// 遍历
for index, char := range str3 {
    
    
 fmt.Printf("str3[%d]: %c\n", index, char)
}
// 比较
if str1 == "Hello" {
    
    
 fmt.Println("str1 equals Hello")
}

字符串连接性能优化:

在 Go 和 Java 中,字符串在内存中都被当作常量处理。因此,不断使用 “+” 符号拼接字符串会产生大量性能开销。针对此,我们有一些优化字符串连接的策略:

  1. 使用 strings.Builder 类型:这种方法适用于你没有提前准备好所有需要拼接的字符串的情况。

  2. 使用 strings.Join() 函数:这种方法适用于你已经准备好所有需要拼接的字符串的情况,且允许我们在拼接的字符串中插入分隔符,这在某些情况下是必需的。但是这种方法会消耗大量内存。

// 输出:11-22
join := strings.Join( []string{
    
    "11", "22"}, "-" )

以下是对这两种方法的应用示例:

// strings.Builder
start := time.Now()
var name strings.Builder
for i := 0; i < 100000; i++ {
    
    
	name.WriteString(strconv.Itoa(i))
}
fmt.Println(time.Since(start))
// strings.Join()
start := time.Now()
var strs []string
for i := 0; i < 100000; i++ {
    
    
	strs = append(strs, strconv.Itoa(i))
}
name := strings.Join(strs, "")
fmt.Println(time.Since(start))
fmt.Println(len(name))

在一些实验中,我们得到了以下结果:

  1. 原生形式:平均 1.3 秒
  2. strings.Builder :平均 2.3 毫秒
  3. strings.Join() :平均 4.8 毫秒

猜你喜欢

转载自blog.csdn.net/qq_35760825/article/details/131750487
今日推荐