Go 语言字符串(String)

在Go语言中,字符串不同于其他语言,如Java、c++、Python等。它是一个变宽字符序列,其中每个字符都用UTF-8编码的一个或多个字节表示。或者换句话说,字符串是任意字节(包括值为零的字节)的不可变链,或者字符串是一个只读字节片,字符串的字节可以使用UTF-8编码在Unicode文本中表示。

由于采用UTF-8编码,Golang字符串可以包含文本,文本是世界上任何语言的混合,而不会造成页面的混乱和限制。通常,字符串用双引号””引起来,如以下示例所示:

//如何创建字符串
package main 
  
import "fmt"
  
func main() { 
  
//创建并初始化
//带有字符串的变量
//使用简写声明
    My_value_1 := "Welcome to (cainiaojc.com)"
  
    //使用var关键字
    var My_value_2 string 
    My_value_2 = "nhooo"
  
    //显示字符串 
    fmt.Println("String 1: ", My_value_1) 
    fmt.Println("String 2: ", My_value_2) 
}

输出:

String 1:  Welcome to (cainiaojc.com)
String 2:  nhooo

注意:字符串可以为空,但不能为nil。

字符串字面量

在Go语言中,字符串字面量是通过两种不同的方式创建的:

package main

import "fmt"

func main() {

    //创建并初始化
    //带有字符串文字的变量
    //使用双引号
    My_value_1 := "Welcome to nhooo"

    //添加转义字符
    My_value_2 := "Welcome!\nnhooo"

    //使用反引号
    My_value_3 := `Hello!nhooo`

    //添加转义字符

    //原始文本
    My_value_4 := `Hello!\nnhooo`

    //显示
    fmt.Println("String 1: ", My_value_1)
    fmt.Println("String 2: ", My_value_2)
    fmt.Println("String 3: ", My_value_3)
    fmt.Println("String 4: ", My_value_4)
}
String 1:  Welcome to nhooo
String 2:  Welcome!
nhooo
String 3:  Hello!nhooo
String 4:  Hello!\nnhooo

关于字符串的要点

//字符串是不可变的
package main 
  
import "fmt"
  
func main() { 
  
        //创建和初始化字符串
        //使用简写声明
    mystr := "Welcome to nhooo"
  
    fmt.Println("String:", mystr) 
  
    /* 果你试图改变字符串的值,编译器将抛出一个错误,例如, 
     cannot assign to mystr[1] 
       mystr[1]= 'G' 
       fmt.Println("String:", mystr) 
    */
  
}
String: Welcome to nhooo
for index, chr:= range str{
     // 语句..
}
//遍历字符串
//使用for范围循环
package main

import "fmt"

func main() {

    //字符串作为for循环中的范围
    for index, s := range "nhooo" {

        fmt.Printf("%c 索引值是 %d\n", s, index)
    }
}
n 索引值是 0
h 索引值是 1
o 索引值是 2
o 索引值是 3
o 索引值是 4
//访问字符串的字节
package main

import "fmt"

func main() {

    //创建和初始化一个字符串
    str := "Welcome to nhooo"

    //访问给定字符串的字节
    for c := 0; c < len(str); c++ {

        fmt.Printf("\n字符 = %c 字节 = %v", str[c], str[c])
    }
}
字符 = W 字节 = 87
字符 = e 字节 = 101
字符 = l 字节 = 108
字符 = c 字节 = 99
字符 = o 字节 = 111
字符 = m 字节 = 109
字符 = e 字节 = 101
字符 =   字节 = 32
字符 = t 字节 = 116
字符 = o 字节 = 111
字符 =   字节 = 32
字符 = n 字节 = 110
字符 = h 字节 = 104
字符 = o 字节 = 111
字符 = o 字节 = 111
字符 = o 字节 = 111
//从切片创建一个字符串 
package main 
  
import "fmt"
  
func main() { 
  
    //创建和初始化一个字节片
    myslice1 := []byte{0x47, 0x65, 0x65, 0x6b, 0x73} 
  
    //从切片创建字符串
    mystring1 := string(myslice1) 
  
    //显示字符串
    fmt.Println("String 1: ", mystring1) 
  
    //创建和初始化一个符文切片 
    myslice2 := []rune{0x0047, 0x0065, 0x0065, 0x006b, 0x0073} 
  
    //从切片创建字符串
    mystring2 := string(myslice2) 
  
    //显示字符串
    fmt.Println("String 2: ", mystring2) 
}
String 1:  Geeks
String 2:  Geeks
//查找字符串的长度
package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {

    //创建和初始化字符串
    //使用简写声明
    mystr := "Welcome to nhooo ??????"

    //查找字符串的长度
    //使用len()函数
    length1 := len(mystr)

    //使用RuneCountInString()函数
    length2 := utf8.RuneCountInString(mystr)

    //显示字符串的长度
    fmt.Println("string:", mystr)
    fmt.Println("Length 1:", length1)
    fmt.Println("Length 2:", length2)

}
string: Welcome to nhooo ??????
Length 1: 31
Length 2: 31