Directorio de artículos
prefacio
Para aprender un idioma, primero comprenda la gramática básica de Golang, como la definición de variables, el tipo de datos, etc.
1. Definición de variables y constantes
1.Variables
Una variable es un nombre dado a una ubicación de memoria para almacenar un valor de un tipo particular.
Definiciones comunes:
// 方式一
name := xxx
// 方式二
var (
name = x
age = 18
)
2.Constante
Las constantes y variables son todo lo contrario: una vez que se declara una constante, su valor no se puede cambiar, como la reasignación.
Generalmente disponible cuando el escenario de uso son datos inmutables.
// 方式一
const name = x
// 方式二
const (
name = ""
age = 18
)
Código completo:
package main
import "fmt"
func main() {
// 1、变量定义:var
name := "ppl"
var name1 = "ppl"
var name2 string
name2 = "ppl"
// 定义多个变量
a, b := "a", "b"
// 常量定义:const
const const1 = 3.14
const (
const2 = 3.14
const3 = 0.618
)
fmt.Println(name, name1, name2, a, b)
fmt.Println(const1, const2, const3)
}
2.Tipo de datos
1 Tipo booleano: verdadero o falso
2 Tipo numérico: int y tipo de punto flotante float32, float64
3 Tipo de cadena: cadena cadena
4 Tipo derivado: tipo de mapa, etc.
func main() {
// 1 布尔型: true 或 false
bool1 := true
// 2 数字类型:整型 int 和浮点型 float32、float64(没有自动类型提升或转换)
number := 10
// 3 字符串类型:字符串string
name := "ppl"
// 4 派生类型:Map 类型等等
Map := make(map[string]string)
Map ["map"] = "yes"
fmt.Println(bool1, number, name, Map)
}
2. Autocreciente y autodecreciente
La sintaxis debe estar en una sola línea.
package main
import "fmt"
func main() {
age := 0
age++
//fmt.Println(age++) 不允许,必须单独一行 ++
fmt.Println(age)
age--
fmt.Println(age)
}
3. puntero
¿Qué es un puntero?
Una variable de puntero apunta a la dirección de memoria de un valor, que se recolecta internamente como basura (gc).
1. Utilice punteros & y *
- Dirección de almacenamiento del puntero variable: &nombre
- Acceda al valor usando un puntero: *ptr
// 声明实际变量
name := "ppl"
// 声明指针变量且存储地址=&name
ptr := &name
fmt.Println("name:", name)
fmt.Println("name ptr:", ptr)
fmt.Println("name ptr使用指针访问值:", *ptr)
2. puntero nulo
Puntero nulo: nulo, un valor nulo como Ninguno de Python, nulo de mysql
// 空指针:nil,既空值如Python的None,mysql的null
var ptrNil *string
// 指针做判断 != 与 ==
if ptrNil == nil {
fmt.Println("ptrNil:", ptrNil)
}
3. Código completo del puntero
package main
import "fmt"
func main() {
// 声明实际变量
name := "ppl"
// 声明指针变量且存储地址=&name
ptr := &name
fmt.Println("name:", name)
fmt.Println("name ptr:", ptr)
fmt.Println("name ptr使用指针访问值:", *ptr)
// 使用new关键字定义
name1 := new(string)
*name1 = "ppl"
fmt.Println(name1)
fmt.Println(*name1)
fmt.Println("strPtr():", strPtr(*name1))
// 空指针:nil,既空值如Python的None,mysql的null
var ptrNil *string
// 指针做判断 != 与 ==
if ptrNil == nil {
fmt.Println("ptrNil:", ptrNil)
}
}
func strPtr(str string) *string {
// 返回 string 的指针
return &str
}
4. La gramática no es compatible
1. Autocreciente y autodecreciente: i y ++i
Escritura correcta: i++ o i–
2. No se admiten la suma y resta de direcciones de memoria (puntero)
3. El operador ternario no es compatible.
java:a > b? a: b
python: a si a > b en caso contrario b
4. En el juicio condicional, sólo bool false es lógicamente falso.
Los números 0 y nil no se admiten como sintaxis de juicio condicional, solo el tipo booleano falso, que es diferente de Python.
Cinco, la cuerda
Los bytes de cadenas en el lenguaje go utilizan codificación UTF-8 para identificar texto Unicode.
Si necesita reemplazar y realizar otras operaciones, debe combinar el paquete de cadenas. Los siguientes son algunos usos básicos:
1. Salida nativa
Utilice signos de interrogación retóricos: ``
2.len obtiene la longitud de la cuerda
Método len: obtiene la longitud del carácter len(xx)
3. Empalmar y formatear la salida
El código anterior str1 + str2 es el siguiente:
package main
import (
"fmt"
)
func main() {
str := "ppl\nPPL"
// 1.原生输出,使用反问号:``
str1 := `Use "go help <command>" for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
Use "go help <topic>" for more information about that topic.
`
fmt.Println(str)
fmt.Println(str1)
// 2.len 方法:获取字符长度
lenStr := len(str)
fmt.Println("len(str)=", lenStr)
// 3.拼接&格式化输出
joinStr := str + "+++join+++join"
fmt.Println(joinStr)
fmt.Printf("joinStr=%s", joinStr)
}
4. Cortar hilos
Cerrado a la izquierda y abierto a la derecha (incluido el lado izquierdo, excluyendo el lado derecho)
// 4.字符串切片
str11 := "HelloWord"
fmt.Println(str11[:5]) // 打印 Hello (切片0-4的字符)
fmt.Println(str11[5:]) // 打印 Word (切片5-最后的字符)
fmt.Println(str11[2:5]) // 打印 第2-第5个字符
Fin