Table des matières
Introduction" >Introduction
Compréhension des pointeurs de type de base" >Compréhension des pointeurs de type de base
引用类型指针的理解" >引用类型指针的理解
值类型和引用类型
" >值类型和引用类型
值类型" >值类型
Types de référence" >Types de référence
nombres à virgule flottante et ainsi de suite
" >nombres à virgule flottante et ainsi de suite
&*的意思" >&*的意思
&🎜🎜et🎜🎜*🎜🎜signification🎜" >🎜&🎜🎜et🎜🎜*🎜🎜signification🎜
关于函数
" >关于函数
Maison développement back-end Golang Un article pour vous aider à comprendre les bases des pointeurs du langage Go

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

Jul 24, 2023 pm 05:27 PM
go语言

Introduction

Le langage Go étant un langage de type C, les pointeurs sont toujours conservés afin d'améliorer l'efficacité.

Mais si vous n'avez jamais été exposé aux pointeurs, vous devrez peut-être réfléchir davantage à leur apprentissage.

Pointer est généralement également connu sous le nom de pointeur magique du novice.


Compréhension des pointeurs de type de base

Premièrement regardez ces deux lignes de code.

var n1 int = 666
fmt.Println(n1)//结果:666
fmt.Printf("%p\n",n1)//结果:%!p(int=666),说明不是一个地址,就是一个值
Copier après la connexion

Le schéma de répartition de la mémoire est le suivant.

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

Regardez à nouveau ces deux lignes de code, & est utilisé ici.

var n1 int = 1
//表示取n1的地址
fmt.Println(&n1)//结果:0xc00000a0b8
fmt.Printf("%p\n",&n1)//结果:0xc00000a0b8
Copier après la connexion

如图所示。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

如果这两个能理解,恭喜你,指针已经会了一半了。


引用类型指针的理解

先看这样的代码。

var studentList = []string{"张三", "李四"}//一个切片
fmt.Println(studentList)        //结果:[张三 李四]
fmt.Printf("%p\n", studentList) //结果:0xc0000044a0
//去地址
fmt.Printf("%p\n", &studentList) //结果:0xc0000044a0
Copier après la connexion

内存分布图如下。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go


值类型和引用类型

值类型

在Go中,值类型主要有。

boolintfloatboolstring数组struct(结构体)

内存分布大致如下。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

注:字符串数组结构体string数组struct(结构体)

内存分布大致如下。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

注:

🎜字符串🎜🎜,🎜🎜数组🎜🎜,🎜🎜结构体🎜🎜这些属于🎜🎜🎜连续存储🎜🎜🎜,🎜🎜🎜变量指向🎜🎜🎜的是它们的🎜🎜🎜第一个地址🎜🎜🎜,剩下的会根据长度计算。🎜🎜🎜

Types de référence

Dans Go, les principaux types de référence sont.

slice切片(slice)map管道(chan) ,

Pipeline (chan)

La distribution de la mémoire est à peu près le suivant. La différence entre la mémoire de pile et la mémoire de tas Un article pour vous aider à comprendre les bases des pointeurs du langage Go caractères


,

nombres à virgule flottante et ainsi de suite

, mais la mémoire allouée par la mémoire de la pile n'a pas besoin d'être recyclée par le programmeur, elle est recyclée par le système lui-même et les performances sont très élevées .

La mémoire tas est relativement riche en stockage. Vous pouvez la stocker comme vous le souhaitez, comme une carte, mais la mémoire allouée par la mémoire tas doit être recyclée par le programmeur. Un exemple typique est C++C++,如果语言由GCGC回收,性能稍弱那么一点点点....,但是人家能随便存啊,多随便。


&*的意思

&叫做取地址符。

*, si le langage est constitué de GC

byGC

🎜recyclage, les performances sont un peu plus faibles... , mais les gens peuvent le sauvegarder à volonté, comme c'est décontracté. 🎜🎜🎜🎜
🎜🎜

🎜&🎜🎜et🎜🎜*🎜🎜signification🎜

&🎜🎜 est appelé le caractère d'adresse. 🎜🎜

*🎜🎜 est appelé le caractère de l'adresse de réception. 🎜🎜🎜🎜Exemple🎜🎜

var c *int//*int是一个整体,说明c这个变量只能接收int类型的
Copier après la connexion

*int是一个整体,表示c这个变量只能接收int类型地址

代码

package main


import "fmt"


func main() {
    var c *int
    var d int = 1
    //c = d//错误需要的是d的地址
    c = &d
    fmt.Println(c)
}
Copier après la connexion

执行结果。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

可以看到打印的也是一个地址,但是内存图还是基本类型图。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go

如果要打印c的值,直接*c就好了,取得就是地址里面对应得值了。

fmt.Println(*c)
Copier après la connexion

关于函数

我们一直在强调,操作只会操作上面的,函数同理。

package main


import "fmt"


func say1(x int) {
    //x int 相当于隐藏了一行代码
    //隐藏的代码时 var x int = x,一定要记住这个
    fmt.Printf("say1:%p\n", x)
}
func say2(x *int) {
    //隐藏的代码是 var x *int = x,x是一个地址
    fmt.Printf("say2:%p\n", x)
}
func say3(x []int) {
    //隐藏的代码是 var x []int = x,因为x是引用类型,所以x是一个地址
    fmt.Printf("say3:%p\n", x)
}
func main() {
    say1(1)//栈上面是1,所以传进去就是1
    var x1 = 1
    say2(&x1)//say只能接收整数地址
    var x2 = []int{1, 1}
    say3(x2)//x2是引用类型,所以传进去的时候就是地址,栈上面的就是地址
}
Copier après la connexion

执行结果。

Un article pour vous aider à comprendre les bases des pointeurs du langage Go


总结

上述我们主要讲述了基本类型指针引用类型指针,也叫做值类型引用类型,并且画出了值类型引用类型内存的本质区分图,后来又讲了&*的区别,还有函数传参的本质是什么,希望对大家的学习有帮助。

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Apr 02, 2025 pm 12:57 PM

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Pourquoi est-il nécessaire de passer des pointeurs lors de l'utilisation de bibliothèques Go et Viper? Pourquoi est-il nécessaire de passer des pointeurs lors de l'utilisation de bibliothèques Go et Viper? Apr 02, 2025 pm 04:00 PM

GO POINTER SYNTAXE ET ATTENDRE DES PROBLÈMES DANS LA BIBLIOTHÈQUE VIPER Lors de la programmation en langage Go, il est crucial de comprendre la syntaxe et l'utilisation des pointeurs, en particulier dans ...

Pourquoi toutes les valeurs deviennent-elles le dernier élément lors de l'utilisation de la plage dans le langage GO pour traverser les tranches et stocker des cartes? Pourquoi toutes les valeurs deviennent-elles le dernier élément lors de l'utilisation de la plage dans le langage GO pour traverser les tranches et stocker des cartes? Apr 02, 2025 pm 04:09 PM

Pourquoi l'itération de la carte dans GO fait-elle que toutes les valeurs deviennent le dernier élément? En langue go, face à des questions d'entrevue, vous rencontrez souvent des cartes ...

See all articles