阅读 369

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 nhooo.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 nhooo.comString 2:  nhooo

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

字符串字面量

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

  • 使用双引号(“”):在这里,字符串字面量使用双引号(“”)创建。此类字符串支持转义字符,如下表所示,但不跨越多行。这种类型的字符串文字在Golang程序中被广泛使用。

    转义符描述
    \\反斜杠(\)
    \000具有给定的3位8位八进制代码点的Unicode字符
    \’单引号(')。仅允许在字符文字中使用
    \”双引号("")。仅允许在解释的字符串文字中使用
    \aASCII铃声(BEL)
    \bASCII退格键(BS)
    \fASCII换页(FF)
    \nASCII换行符(LF)
    \rASCII回车(CR)
    \tASCII标签(TAB)
    \uhhhh具有给定的4位16位十六进制代码点的Unicode字符。

    具有给定的8位32位十六进制代码点的Unicode字符。
    \vASCII垂直制表符(VT)
    \xhh具有给定的2位8位十六进制代码点的Unicode字符。
  • 使用反引号(``):此处,字符串文字是使用反引号(``)创建的,也称为raw literals(原始文本)。原始文本不支持转义字符,可以跨越多行,并且可以包含除反引号之外的任何字符。通常,它用于在正则表达式和HTML中编写多行消息。

    示例

    package mainimport "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 nhoooString 2:  Welcome!
    nhoooString 3:  Hello!nhoooString 4:  Hello!\nnhooo

关于字符串的要点

  • 字符串是不可变的:在Go语言中,一旦创建了字符串,则字符串是不可变的,无法更改字符串的值。换句话说,字符串是只读的。如果尝试更改,则编译器将引发错误。

    示例

    //字符串是不可变的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 range循环遍历字符串。此循环可以在Unicode代码点上迭代一个字符串。

    语法:

    for index, chr:= range str{
         // 语句..}

    在这里,索引是存储UTF-8编码代码点的第一个字节的变量,而chr是存储给定字符串的字符的变量,str是字符串。

    示例

    //遍历字符串//使用for范围循环package mainimport "fmt"func main() {
    
        //字符串作为for循环中的范围    for index, s := range "nhooo" {
    
            fmt.Printf("%c 索引值是 %d\n", s, index)
        }
    }

    输出:

    n 索引值是 0h 索引值是 1o 索引值是 2o 索引值是 3o 索引值是 4
  • 如何访问字符串的单个字节?:字符串是一个字节,因此,我们可以访问给定字符串的每个字节。

    示例

    //访问字符串的字节package mainimport "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
  • 如何从切片创建字符串?:在Go语言中,允许您从字节切片创建字符串。

    示例

    //从切片创建一个字符串 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:  GeeksString 2:  Geeks
  • 如何查找字符串的长度?:在Golang字符串中,可以使用两个函数(一个是len(),另一个是RuneCountInString())来找到字符串的长度。UTF-8包提供了RuneCountInString()函数,该函数返回字符串中存在的符文总数。len()函数返回字符串的字节数。

    示例

    //查找字符串的长度package mainimport (
        "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: 31Length 2: 31


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐