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

Онлайн-инструменты

Основные руководства Golang

Контрольные операторы Golang

Функции и методы Golang

Структуры Golang

Срезы и массивы Golang

Строки Golang

Указатели Golang

Интерфейсы Golang

Конкурентоспособность Golang

Ошибки Golang

Строка (String) языка Go

Другие статьи Golang

В языке Go строки отличаются от других языков, таких как Java, C++, Python и т.д. Это последовательность расширяемых символов, каждый символ которой представлен одним или несколькими байтами кодировки UTF-8. Или换句话说, строка - это неизменяемая цепочка байтов (включая байты с нулевым значением), или строка - это только чтение байтовой строки, байты которой можно кодировать в Unicode-текст.Из-за использования кодировки UTF-8 строки Golang могут содержать текст, текст может быть любым языком мира, и это не приведет к хаосу и ограничениям на странице. Обычно, строки используютсяДвойные кавычки""Цитата

,как показано в следующем примере:
package main 
  
import "fmt"
  
func main() { 
  
//создание и инициализация
//Как создавать строки
//使用简写声明
    //Переменная со строкой
  
    //Использование ключевого слова 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-программах.

    Escape-символыОписание
    \\\Обратнаястрока(\)
    \000Unicode-символы с заданными3-битными8-битнымикодами
    \'Одинарныескобки(')。Разрешенытолько вcharacter literals
    \"Двоеточия("")。Разрешенытолько вinterpreted string literals
    \aASCIIзвонок(BEL)
    \bASCIIклавишабackspace(BS)
    \fASCIIзнакстраницы(FF)
    \nASCIIзнакновойстроки(LF)
    \rASCIIвозвратныйзнак(CR)
    \tASCIIтег(TAB)
    \uhhhhUnicode-символы с заданными4-битными16-битнымикодами

    Unicode-символы с заданными8-битными32-битнымикодами
    \vASCIIвертикальныйтабулятор(VT)
    \xhhUnicode-символы с заданными2-битными16-битнымикодами
  • Использованиеобратныхстрочныхзнаков(``):Здесь, строковые литералы создаются с помощьюобратныхстрочныхзнаков(``),также называемыхraw literals(исходный текст)。Исходный текст не поддерживаетEscape-символы, можетпреодолевать несколько строк и может содержатьлюбые символы, кромеобратныхстрочныхзнаков.Обычно, ониспользуется длянаписаниямногoliniевыхсообщений вregular expression иHTML.

    package main
    import "fmt"
    func main() {
        //создание и инициализация
        //символьныевariабли
        //использованиедвоеточий
        My_value_1 := "Добро пожаловать в w3codebox"
        //добавлениеEscape-символов
        My_value_2 := "Добро пожаловать!
    w3codebox"
        //использованиеобратныхстрочныхзнаков
        My_value_3 := `Привет!w3codebox`
        //добавлениеEscape-символов
        //исходный текст
        My_value_4 := `Привет!
    w3codebox`
        //显示
        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:  Добро пожаловать в w3codebox
    String 2:  Добро пожаловать!
    w3codebox
    String 3:  Привет!w3codebox
    Строка 4: Hello!
    w3codebox

Важные моменты о строках

  • Строка не может быть изменена:В языке Go, как только строка создается, она является неизменной и не может быть изменена. Иначе говоря, строка является только для чтения. Если попытаться изменить, то компилятор вызовет ошибку.

    //Строка не может быть изменена
    package main 
      
    import "fmt"
      
    func main() { 
      
            //创建和初始化字符串
            //使用简写声明
        mystr := "Welcome to w3codebox"
      
        fmt.Println("Строка:", mystr) 
      
        /* Если вы пытаетесь изменить значение строки, компилятор выбросит ошибку, например, 
         cannot assign to mystr[1] 
           mystr[1]= 'G' 
           fmt.Println("Строка:", mystr) 
        */
      
    }

    输出:

    Строка: Welcome to w3codebox
  • Как遍хождать строку?:Вы можете использовать цикл for range для遍хождение строки. Этот цикл может итерироваться по Unicode кодовым точкам строки.

    Синтаксис:

    for index, chr := range str {
         // Оператор...
    }

    В данном случае, индекс является переменной, хранящей первый байт кода UTF-8, аchr являетсяПеременная для хранения символов заданной строки, str является строкой.

    //Прогон строки
    //Использование цикла for range
    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
  • Как получить доступ к отдельному байту строки?Строка является байтом, поэтому, мы можем доступ ourselves к каждому байту заданной строки.

    //Доступ к байтам строки
    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() { 
      
        //创建和初始化一个字节片
        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
  • 如何查找字符串的长度?:在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
    Длина 2: 31