Maison > développement back-end > Golang > Quels types de données existe-t-il dans le langage Go ?

Quels types de données existe-t-il dans le langage Go ?

青灯夜游
Libérer: 2021-06-07 14:35:29
original
5489 Les gens l'ont consulté

Les types de données du langage go sont : 1. Type booléen ; 2. Type numérique (peut être divisé en type entier et virgule flottante) 3. Type de chaîne ; 6. Type structuré ; 7. Type de canal ; 8. Type de fonction ; 10. Type d’interface ;

Quels types de données existe-t-il dans le langage Go ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, GO 1.11.2, ordinateur Dell G3.

Le langage Go est un langage de programmation typé statiquement. Dans le langage de programmation Go, les types de données sont utilisés pour déclarer des fonctions et des variables. L'émergence des types de données consiste à diviser les données en données avec différentes tailles de mémoire requises lors de la programmation, vous devez demander une grande mémoire uniquement lorsque vous avez besoin d'utiliser du Big Data, afin de pouvoir utiliser pleinement la mémoire. Lorsque le compilateur compile, il doit connaître le type de chaque valeur, afin que le compilateur sache combien de mémoire allouer pour cette valeur et ce que représente cette mémoire allouée.

Description du type de données de base

类型 描述
uint 32位或64位
uint8 无符号 8 位整型 (0 到 255)
uint16 无符号 16 位整型 (0 到 65535)
uint32 无符号 32 位整型 (0 到 4294967295)
uint64 无符号 64 位整型 (0 到 18446744073709551615)
int 32位或64位
int8 有符号 8 位整型 (-128 到 127)
int16 有符号 16 位整型 (-32768 到 32767)
int32 有符号 32 位整型 (-2147483648 到 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
byte uint8的别名(type byte = uint8)
rune int32的别名(type rune = int32),表示一个unicode码
uintptr 无符号整型,用于存放一个指针是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。
uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
float32 IEEE-754 32位浮点型数
float64 IEEE-754 64位浮点型数
complex64 32 位实数和虚数
complex128 64 位实数和虚数

Entier

Les données entières sont divisées en deux types, 有符号 et 无符号

Signé : int, int8, int16 , int32, int64

Non signé : uint, uint8, uint16, uint32, uint64, byte
La différence entre les entiers avec des chiffres différents est qu'ils peuvent stocker des entiers La taille du nombre range;

Les types signés peuvent stocker n'importe quel nombre entier, les types non signés ne peuvent stocker que des nombres naturels

Les tailles de int et uint sont liées au système. S'il s'agit d'un système 64 bits, cela signifie que int64 et uint64

byte sont similaires à uint8 et sont généralement utilisés pour stocker des caractères uniques

Pour vous assurer que le programme fonctionne correctement, essayez pour utiliser des types de données qui prennent moins de place

fmt.Printf("%T", var_name) type de variable de sortie

unsafe.Sizeof(var_name) afficher les octets occupés par la variable

Type à virgule flottante

Le type à virgule flottante est le type décimal et peut stocker des décimales. Par exemple, 6.6, -12.34

1. Une brève explication de la forme de stockage des nombres à virgule flottante dans la machine Nombres à virgule flottante = bit de signe + bit d'exposant + bit de mantisse

2. La partie mantisse peut être perdue, entraînant une perte de précision. -123.0000901

package main

import "fmt"

func main() {
    
    var num1 float32 = -123.0000901
    var num2 float64 = -123.0000901
    fmt.Println("num1 = ", num1, "num2 = ", num2);
}
Copier après la connexion

Explication : La précision de float64 est plus précise que celle de float32

Explication : Si nous voulons enregistrer un nombre de haute précision, nous devrions choisissez float64

3. Le stockage du type à virgule flottante est divisé en trois parties : bit de signe + bit d'exposant + bit de mantisse. Pendant le processus de stockage, la précision sera perdue

4. type à virgule flottante La valeur par défaut est le type float64

5 Normalement, float64 doit être utilisé car il est plus précis que float32

6 peut être abrégé en .123, et il prend également en charge les sciences. notation : 5.1234e2 Équivalent à 512.34

Caractère

Il n'y a pas de type de caractère spécial dans Golang. Si vous souhaitez stocker un seul caractère (lettre), l'octet est généralement. utilisé pour le sauvegarder.

Une chaîne est une séquence de caractères reliés par une longueur fixe de caractères. Les chaînes de Go sont reliées par des octets simples, ce qui signifie que les chaînes traditionnelles sont composées de caractères, mais Les chaînes de Go sont différentes, elles sont composées d'octets . Les caractères

  • ne peuvent être entourés que de guillemets simples, pas de guillemets doubles. Les guillemets doubles enveloppent une chaîne
  • Lorsque nous affichons directement la valeur du type, nous affichons le code ASCII du caractère correspondant. .Valeur
  • Lorsque nous voulons afficher les caractères correspondants, nous devons utiliser une sortie formatée
  • Les caractères de la langue Go utilisent le codage UTF-8, les lettres anglaises occupent un caractère et les caractères chinois occupent trois caractères.
  • Dans Go, l'essence d'un caractère est un entier. Lorsqu'il est sorti directement, il s'agit de la valeur du code d'encodage UTF-8 correspondant au caractère.
  • Vous pouvez directement attribuer un nombre à une variable, puis formater la sortie avec %c, qui affichera le caractère Unicode correspondant au nombre
  • Le type de caractère peut être calculé et est équivalent à un entier , car ils ont tous des codes Unicode correspondants
package main

import "fmt"

func main() {
    
    //字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
    var c1 byte = 'a'
    var c2 byte = '0'

    //当我们直接输出type值时,就是输出了对应字符的ASCII码值
    //'a' ==> 97
    fmt.Println(c1, "--", c2)
    //如果我们希望输出对应字符,需要使用格式化输出
    fmt.Printf("c2 = %c c2 = %c", c1, c2)
}
Copier après la connexion

Mais si les caractères que nous enregistrons sont supérieurs à 255, comme le stockage de caractères chinois, alors le Le type d'octet ne peut pas être enregistré. Vous pouvez utiliser le type uint ou int pour enregistrer

Discussion sur l'essence du type de caractère

  • Le type de caractère est stocké dans l'ordinateur, et la valeur du code correspondant au caractère doit être stockée (Entier) Découvrez

    Stockage : caractère--> Valeur du code-->

    Lecture : Binaire-->Valeur du code--> Caractères --> Lecture

  • La correspondance entre les caractères et les valeurs du code est déterminée par la table de codage des caractères. (c'est précisé)

  • L'encodage du langage Go est unifié en UTF-8. Très pratique et unifié, plus de problèmes d'encodage tronqué

Type booléen

Le type booléen est également appelé type booléen, et les données de type booléen n'autorisent que la valeur vrai ou faux

Le type bool occupe 1 octet

Le type bool convient aux opérations logiques, généralement utilisées pour le contrôle des processus

String

La chaîne est une séquence de caractères connectés d’une longueur fixe. Les chaînes de Go sont concaténées à partir d'octets simples. Les octets des chaînes du langage Go utilisent le codage UTF-8 pour identifier le texte Unicode

1. Une fois qu'une chaîne se voit attribuer une valeur, elle ne peut pas être modifiée :

Les chaînes sont immuables dans Go.

2. Deux formes d'identification de chaînes

  • guillemets doubles reconnaîtront le caractère d'échappement

    var str = "abc\nabc" //输出时会换行
    Copier après la connexion

  • Backticks , la sortie sous la forme native de la chaîne, y compris les sauts de ligne et les caractères spéciaux, peut empêcher les attaques, générer du code source et d'autres effets

    var str string = `abc\nabc` //输出时原样输出,不会转义
    Copier après la connexion

Méthode d'épissage de chaîne "+" <🎜. >
var str string = "hello " + "world"
str += "!"
Copier après la connexion

4. Lorsqu'une ligne de chaîne est trop longue et que des chaînes multilignes doivent être utilisées, vous pouvez utiliser le traitement suivant

//正确写法
str := "hello" + 
	" world!"
fmt.Println(str)

//错误写法
str := "hello "
	+ "world!"
fmt.Println(str)
Copier après la connexion

Pointeur

<🎜. >

Type de données de base, les variables stockent des valeurs, également appelées types de valeur
  • Pour obtenir l'adresse d'une variable, utilisez &, tel que var num int, pour obtenir l'adresse de num : &num
  • 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值,比如:var ptr *int = &num

  • 获取指针类型所指向的值,使用:*,比如,var ptr *int,使用*ptr获取ptr指向的值

指针细节说明:

  • 值类型,都有对应的指针类型,形式为*数据类型,比如int对应的指针就是*int,float64对应的指针类型就是*float64,依此类推。

  • 值类型包括:基本数据类型数组结构体struct

值类型与引用类型

值类型和引用类型使用特点:

值类型:变量直接存储值,内存通常在中分配

引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在上分配,当没有任何变量应用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。

Golang中值类型和引用类型的区分

  • 值类型:基本数据类型(int系列、float系列、bool、string)、数组和结构体

  • 引用类型:指针、slice切片、map、管道chan、interface等都是引用类型

基本数据类型默认值

在Golang中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在Golang中,默认值也叫做零值。

基本数据类型默认值如下:

数据类型默认值
整型0
浮点型0
字符串""
布尔类型false
package main

import "fmt"

func main() {
    
    var a int
    var b float32
    var isTrue bool
    var str string

    //这里的%v,表示按照变量的值输出
    fmt.Printf("a = %v, b = %v, isTrue = %v, str = %v", a, b, isTrue, str)
    fmt.Println("")
}
Copier après la connexion

推荐学习:Golang教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal