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

Tutoriales básicos de Go

Instrucciones de control de Go

Función y método de Go

Estructura de Go

Corteza y matriz de Go

Cadena (String) de Go

Puntero de Go

Interfaz de Go

Concurrencia de Go

Excepciones (Error) de Go

Otros artículos de Go

Cadena (String) del lenguaje Go

En el lenguaje Go, las cadenas son diferentes de otros lenguajes, como Java, c++、Python, etc. Es una secuencia de caracteres anchos, donde cada carácter se representa con UTF-8Codificación de uno o más bytes. O换句话说,la cadena es una secuencia de caracteres de bytes (incluso bytes con valor cero) inmutables, o la cadena es un fragmento de bytes solo de lectura, los bytes de la cadena pueden usar UTF-8Codificación se representa en texto Unicode.

Debido a la adopción de UTF-8Codificación,las cadenas de Go pueden contener texto, y el texto es una mezcla de cualquier lenguaje del mundo, sin causar confusión y limitaciones en la página. Generalmente, las cadenas se utilizanComillas dobles””Citado,como se muestra en el siguiente ejemplo:

//Cómo crear una cadena
package main 
  
import "fmt"
  
func main() { 
  
//Crear e inicializar
//Variable con cadena
//usar declaración abreviada
    My_value_1 = "Bienvenido a oldtoolbag.com"
  
    //Uso de la palabra clave var
    var My_value_2 string 
    My_value_2 = "w3codebox"
  
    //mostrar la cadena 
    fmt.Println("Cadena:", mystring) 1: ", My_value_1) 
    fmt.Println("Cadena:", mystring) 2: ", My_value_2) 
}

salida:

String 1: Bienvenido a oldtoolbag.com
String 2:  w3codebox

Nota:La cadena puede estar vacía, pero no puede ser nil.

Cadena literal

En el lenguaje Go, las cadenas literales se crean de dos formas diferentes:

  • Uso de comillas dobles (""):Aquí, las cadenas literales se crean usando comillas dobles ("")。Este tipo de cadenas de texto admite caracteres de escape, como se muestra en la tabla siguiente, pero no se extienden a múltiples líneas. Este tipo de texto literal se utiliza ampliamente en programas de Go.

    Carácter de escapeDescripción
    \\\Barra invertida (\)
    \000dado3con8Carácter Unicode de código de punto octal
    \’Comillas simples (')。Sólo se permiten en cadenas de caracteres
    \”Comillas dobles ("")。Sólo se permiten en cadenas de texto interpretadas
    \aCampana ASCII (BEL)
    \bTecla de retroceso ASCII (BS)
    \fCarácter de cambio de página ASCII (FF)
    \nCarácter de nueva línea ASCII (LF)
    \rCarácter de retorno de carro ASCII (CR)
    \tCarácter de etiqueta ASCII (TAB)
    \uhhhhdado4con16caracteres Unicode de código hexadecimal.

    dado8con32caracteres Unicode de código hexadecimal.
    \vCaracter de tabulación vertical ASCII (VT)
    \xhhdado2con8caracteres Unicode de código hexadecimal.
  • Uso de comillas invertidas (``):Aquí, el texto literal se crea usando comillas invertidas (``), también conocido comoLiterals raw(Texto original). El texto original no admite caracteres de escape, puede cruzar múltiples líneas y puede contener cualquier carácter excepto las comillas invertidas. Generalmente, se utiliza para escribir mensajes en línea en expresiones regulares y HTML.

    package main
    import "fmt"
    func main() {
        //Crear e inicializar
        //Variable con texto literal
        //Uso de comillas dobles
        My_value_1 = "Bienvenido a w3codebox"
        //Agregar caracteres de escape
        My_value_2 = "Bienvenido!\nw3codebox"
        //Uso de comillas invertidas
        My_value_3 = `Hello!w3codebox`
        //Agregar caracteres de escape
        //Texto original
        My_value_4 = `Hello!\nw3codebox`
        //Mostrar
        fmt.Println("Cadena:", mystring) 1: ", My_value_1)
        fmt.Println("Cadena:", mystring) 2: ", My_value_2)
        fmt.Println("Cadena:", mystring) 3: ", My_value_3)
        fmt.Println("Cadena:", mystring) 4: ", My_value_4)
    }

    salida:

    String 1: Bienvenido a w3codebox
    String 2: Bienvenido!
    w3codebox
    String 3: Hello!w3codebox
    String 4: Hello!\nw3codebox

Puntos clave sobre las cadenas

  • Las cadenas son inmutables:En el lenguaje Go, una vez creada una cadena, esta es inmutable y no se puede cambiar el valor de la cadena. En otras palabras, las cadenas son de solo lectura. Si se intenta cambiar, el compilador generará un error.

    //Las cadenas son inmutables
    package main 
      
    import "fmt"
      
    func main() { 
      
            //crear e inicializar una cadena
            //usar declaración abreviada
        mystr := "Welcome to w3codebox"
      
        fmt.Println("Cadena:", mystr) 
      
        /* Si intentas cambiar el valor de la cadena, el compilador lanzará un error, por ejemplo, 
         no se puede asignar a mystr[1] 
           mystr[1= 'G' 
           fmt.Println("Cadena:", mystr) 
        */
      
    }

    salida:

    Cadena: Bienvenido a w3codebox
  • ¿Cómo recorrer una cadena? :Puedes usar el bucle for range para recorrer una cadena. Este bucle puede iterar sobre los puntos de código Unicode de una cadena.

    Sintaxis:

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

    Aquí, el índice es el que almacena UTF-8Variable para el primer byte del código punto de la codificación, mientras quechr esVariable para almacenar los caracteres de la cadena dada, str es una cadena.

    //Recorrer una cadena
    //Uso de bucle for range
    package main
    import "fmt"
    func main() {
        //La cadena como rango en un bucle for
        for index, s := range "w3codebox" {
            fmt.Printf("%c índice es %d\n", s, index)
        }
    }

    salida:

    El índice de n es 0
    El índice de h es 1
    El índice de o es 2
    El índice de o es 3
    El índice de o es 4
  • ¿Cómo acceder a un byte individual de una cadena?Una cadena es un byte, por lo tanto, podemos acceder a cada byte de la cadena dada.

    //Acceder a los bytes de una cadena
    package main
    import "fmt"
    func main() {
        //Crear e inicializar una cadena
        str := "Bienvenido a w3codebox"
        //acceder a los bytes de la cadena dada
        for c := 0; c < len(str); c++ {
            fmt.Printf("\ncarácter = %c bytes = %v", str[c], str[c])
        }
    }

    salida:

    carácter = W bytes = 87
    carácter = e bytes = 101
    carácter = l bytes = 108
    carácter = c bytes = 99
    carácter = o bytes = 111
    carácter = m bytes = 109
    carácter = e bytes = 101
    carácter = bytes = 32
    carácter = t bytes = 116
    carácter = o bytes = 111
    carácter = bytes = 32
    carácter = n bytes = 110
    carácter = h bytes = 104
    carácter = o bytes = 111
    carácter = o bytes = 111
    carácter = o bytes = 111
  • ¿Cómo crear una cadena desde un slice?:En el lenguaje Go, se permite crear una cadena a partir de un slice de bytes.

    //crear una cadena desde un slice 
    package main 
      
    import "fmt"
      
    func main() { 
      
        //crear e inicializar un slice de bytes
        myslice1 := []byte{0x47, 0x65, 0x65, 0x6b, 0x73} 
      
        //crear una cadena desde un slice
        mystring1 := string(myslice1) 
      
        //mostrar la cadena
        fmt.Println("Cadena:", mystring) 1: ", mystring1) 
      
        //crear e inicializar un slice de caracteres 
        myslice2 := []rune{0x0047, 0x0065, 0x0065, 0x006b, 0x0073} 
      
        //crear una cadena desde un slice
        mystring2 := string(myslice2) 
      
        //mostrar la cadena
        fmt.Println("Cadena:", mystring) 2: ", mystring2) 
    }

    salida:

    String 1:  Geeks
    String 2:  Geeks
  • ¿Cómo encontrar la longitud de una cadena?:En las cadenas de Golang, se pueden usar dos funciones (una eslen(),otra esRuneCountInString())para encontrar la longitud de la cadena. UTF-8el paquete proporciona la función RuneCountInString(),que devuelve el número total de caracteres en la cadena.len()la función devuelve el número de bytes de la cadena.

    //encontrar la longitud de la cadena
    package main
    import ("
        "fmt"
        "unicode/utf8"
    )
    func main() {
        //crear e inicializar una cadena
        //usar declaración abreviada
        mystr := "Welcome to w3codebox ??????"
        //encontrar la longitud de la cadena
        //usar la función len()
        longitud1 := len(mystr)
        //usar la función RuneCountInString()
        longitud2 := utf8.RuneCountInString(mystr)
        //mostrar la longitud de la cadena
        fmt.Println("cadena:", mystr)
        fmt.Println("Longitud 1:", longitud1)
        fmt.Println("Longitud 2:", longitud2)
    }

    salida:

    string: Welcome to w3codebox ??????
    Longitud 1: 31
    Longitud 2: 31