English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 기본 강의

Golang 제어 문

Golang 함수 & 메서드

Golang 구조체

Golang 슬라이스 & 배열

Golang 문자열(String)

Golang 포인터

Golang 인터페이스

Golang 병목

Golang 예외(Error)

Golang 다른 혼합

Go 언어 문자열(String)

Go 언어에서 문자열은 Java, c++、Python 등. 이는 UTF-8编码의 하나나 다수의 바이트로 표현됩니다. 다시 말해, 문자열은 언제든지 바이트(值为零인 바이트 포함)의 불변 연결이거나, 문자열은 읽기 전용 바이트 슬라이스이며, 문자열의 바이트는 UTF를 사용할 수 있습니다.-8编码으로 표현된 Unicode 텍스트에 있습니다.

UTF-8编码, Golang 문자열은 텍스트를 포함할 수 있으며, 텍스트는 세계의 어떤 언어의 혼합도 페이지 혼란과 제한을 초래하지 않습니다. 일반적으로 문자열은둥근 괄호””내용을، 다음 예제와 같이 보여줍니다:

//문자열을 어떻게 생성하나요?
package main 
  
import "fmt"
  
func main() { 
  
//(原始文本)。原始文本不支持转义字符,可以跨越多行,并且可以包含除反引号之外的任何字符。通常,它用于在正则表达式和HTML中编写多行消息。
//문자열을 포함한 변수
//단축 선언 사용
    My_value_1 := "Welcome to oldtoolbag.com"
  
    //var 키워드 사용
    var My_value_2 string 
    My_value_2 = "w3codebox"
  
    //문자열을 표시 
    fmt.Println("String 1: ", My_value_1) 
    fmt.Println("String 2: ", My_value_2) 
}

출력:

String 1: Welcome to oldtoolbag.com
String 2:  w3codebox

주의:문자열은 비어있을 수 있지만 nil이 될 수 없습니다.

문자열 리터럴

Go 언어에서 문자열 리터럴은 두 가지 방식으로 생성됩니다:

  • 둥근 괄호(“”) 사용:여기서, 문자열 리터럴은 둥근 괄호(“”)로 생성됩니다. 이 유형의 문자열 리터럴은 다음 표에 나타낸과 같은 escape 문자를 지원하지만, 다중 행을 건너뛰지 않습니다. 이 유형의 문자열 리터럴은 Golang 프로그램에서 널리 사용됩니다。

    scape 문자설명
    \\\반쪽 기호(\)
    \000\xhh3具有给定的8비트 8진 코드 포인트의 유니코드 문자
    \’尖括호('))。문자 텍스트에서만 사용가능
    \”둥근 괄호("")。해석된 문자열 텍스트에서만 사용가능
    \aASCII 벨(BEL)
    \bASCII 백스페이스 키(BS)
    \fASCII 페이지 변경(FF)
    \nASCII 줄 바꿈(LF)
    \rASCII 개행(CR)
    \tASCII 탭(TAB)
    \uhhhh\xhh4具有给定的16位

    \xhh8具有给定的32位
    \vASCII 수직 테이블 표시(VT)
    \xhh\xhh2具有给定的8位
  • 位十六进制代码点的Unicode字符。使用反引号(``):此处,字符串文字是使用反引号(``)创建的,也称为raw literals

    package main
    import "fmt"
    func main() {
        //(原始文本)。原始文本不支持转义字符,可以跨越多行,并且可以包含除反引号之外的任何字符。通常,它用于在正则表达式和HTML中编写多行消息。
        //创建并初始化
        //带有字符串文字的变量
        My_value_1 := "Welcome to w3codebox"
        //添加转义字符
        My_value_2 := "Welcome to w3codebox"
        //:= "Welcome!\nw
        My_value_3 := `Hello!w3codebox`
        //添加转义字符
        //原始文本
        My_value_4 := `Hello!\nw3codebox`
        //显示
        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 w3codebox
    String 2: Welcome!
    w3codebox
    String 3: Hello!w3codebox
    String 4: Hello!\nw3codebox

关于字符串的要点

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

    //字符串是不可变的
    package main 
      
    import "fmt"
      
    func main() { 
      
            //문자열 생성 및 초기화
            //단축 선언 사용
        mystr := "Welcome to w3codebox"
      
        fmt.Println("String:", mystr) 
      
        /* 如果你试图改变字符串的值,编译器将抛出一个错误,例如, 
         cannot assign to mystr[1] 
           mystr[1]= 'G' 
           fmt.Println("String:", mystr) 
        */
      
    }

    출력:

    String: Welcome to w3codebox
  • 如何遍历字符串?:您可以使用for range循环遍历字符串。此循环可以在Unicode代码点上迭代一个字符串。

    语法:

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

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

    //遍历字符串
    //使用for范围循环
    package main
    import "fmt"
    func main() {
        //字符串作为for循环中的范围
        for index, s := range "w3codebox" {
            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 w3codebox"
        //지정된 문자열의 바이트에 접근
        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() { 
      
        //데이터 타입 byte의 슬라이스 생성 및 초기화
        myslice1 := []byte{0x47, 0x65, 0x65, 0x6b, 0x73} 
      
        //슬라이스에서 문자열 생성
        mystring1 := string(myslice1) 
      
        //문자열을 표시
        fmt.Println("String 1: ", mystring1) 
      
        //데이터 타입 rune의 슬라이스 생성 및 초기화 
        myslice2 := []rune{0x0047, 0x0065, 0x0065, 0x006b, 0x0073} 
      
        //슬라이스에서 문자열 생성
        mystring2 := string(myslice2) 
      
        //문자열을 표시
        fmt.Println("String 2: ", mystring2) 
    }

    출력:

    String 1:  Geeks
    String 2:  Geeks
  • 문자열의 길이를 어떻게 찾을 수 있습니까?:Golang 문자열에서는 두 가지 함수를 사용할 수 있습니다. (한 가지는len(),다른 것은RuneCountInString())문자열의 길이를 찾으려면 UTF-8패키지는 RuneCountInString() 함수를 제공합니다. 이 함수는 문자열에存在的 모든 캐릭터 수를 반환합니다.len()함수는 문자열의 바이트수를 반환합니다.

    //문자열의 길이를 찾기
    package main
    import ("
        "fmt"
        "unicode/utf8"
    )
    func main() {
        //문자열 생성 및 초기화
        //단축 선언 사용
        mystr := "Welcome to w3codebox ??????"
        //문자열의 길이를 찾기
        //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 w3codebox ??????
    Length 1: 31
    Length 2: 31