Golang Learning Road 2: comprensión básica (Parte 1)


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)
}

Insertar descripción de la imagen aquí

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)
}

Insertar descripción de la imagen aquí


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)
}

Insertar descripción de la imagen aquí

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个字符

Insertar descripción de la imagen aquí

Fin

Supongo que te gusta

Origin blog.csdn.net/qq_42675140/article/details/127476486
Recomendado
Clasificación