Golang 实现字符串不可变性
默认情况下,Go中字符串是不可变的。一旦创建了一个字符串,就无法更改它。如果尝试更改字符串的值,将出现编译时错误。因此,不需要添加任何更多的逻辑来使其不可变。让我们看看执行的过程。下面我们将学习使用Go编程中的不同技术实现字符串的不可变性。
步骤
- 步骤1 - 创建一个main包,并在该程序中声明fmt(格式化包)包,其中main生成可执行代码,fmt用于格式化输入和输出。
-
步骤2 - 创建一个main函数,并在该函数中初始化一个字符串并赋予某个值。
-
步骤3 - 更改字符串值的引用,并使用fmt.Println()函数将其打印到屏幕上,其中ln表示新行。
-
步骤4 - 在这里,我们无法更改原始字符串,但可以修改其引用。
示例1
在此示例中,我们将看到如何使用字符串字面量使字符串不可变。输出将是使用fmt.Println()函数打印在屏幕上的字符串值,该函数是Golang中的打印函数。
package main
import "fmt"
func main() {
// Create an immutable string
var str_val = "Hello, World!"
str_val = "Cannot change this string" // string reference is given here
fmt.Println("The string presented here is:")
fmt.Println(str_val) //print the string value
}
输出
The string presented here is:
Cannot change this string
示例2
使用 bytes.Buffer 包在示例中使字符串不可变的 Golang 程序
package main
import (
"bytes"
"fmt"
)
func main() {
var buffer bytes.Buffer
buffer.WriteString("Hello, World!") //add string to the buffer
val := buffer.String() //store the buffer string in val
fmt.Println("The string presented here is:")
fmt.Println(val) //print string on the console
buffer.WriteString("Cannot change this string")
}
输出
The string presented here is:
Hello, World!
示例3
在这个示例中,我们将看到如何修改字符串的引用,但不修改原始字符串。我们将使用Golang的print语句将字符串连接起来并打印到屏幕上。
package main
import "fmt"
func main() {
str := "hello" // create string
fmt.Println("The original string is:", str)
str = str + " world" //concatenation
fmt.Println("The reference string in which new string concatenated is:")
fmt.Println(str) // prints "hello world"
// str is still "hello"
}
输出
The original string is: hello
The reference string in which new string concatenated is:
hello world
示例4
在这个示例中,我们将看到如何使用字节数组使字符串成为不可变,并将其转换回字符串。输出字符串将打印在屏幕上。
package main
import "fmt"
func main() {
byte_val := []byte("hello") //create byte slice
byte_val[0] = 'E' //modify 0th value
str := string(byte_val) //cast it to string
fmt.Println("The immutability of string is presented as:")
fmt.Println(str) // print the string on console
}
输出
The immutability of string is presented as:
Eello
结论
我们在设置中使用了4个示例来执行使字符串不可变的程序。在第一个示例中,我们使用字符串常量来创建字符串,然后修改它。在第二个示例中,我们使用bytes.Buffer包来使字符串不可变。在第三个示例中,我们拼接了新值,在第四个示例中,我们使用了字节切片并将其转换为字符串。因此,程序成功执行。