走入Golang(5) |青训营

111 阅读5分钟

今天的文章内容主要为变量与数据类型的最后一部分内容指针的入门和标识符的使用。

在讲述正文开始之前我们首先来了解一下基本数据类型的内存,我们说在进行代码的编写的时候,我们定义的变量等都是储存起来的,称之为内存。储存的位置会赋予它一个地址,使用&符号+变量 就可以获取这个变量内存的地址,如fmt.Println(&age)。我们也可以参照下图进行理解:

image.png

(一)指针

1.定义一个指针变量:var ptr *int = &age

其中:var代表要声明一个变量;

ptr 指针变量的名字;

ptr对应的类型是:*int 是一个指针类型 (可以理解为 指向int类型的指针);

&age就是一个地址,是ptr变量的具体的值

2.获取指针数据

想获取ptr这个指针或者这个地址指向的那个数据:

fmt.Printf("ptr指向的数值为:%v",*ptr)

3.指针主要用于以下两个场景:

间接访问变量:通过指针可以间接地访问和修改变量的值。可以使用&操作符来获取变量的地址,使用*操作符来访问指针指向的变量。例如,p = &num表示将变量num的地址赋值给指针p,*p表示访问指针p指向的变量的值。

 函数参数传递:通过指针可以在函数间传递变量的引用,以便在函数内部修改变量的值。当我们希望在函数内部修改一个变量的值,并且希望这个变化在函数外部也能生效时,可以使用指针作为函数的参数。例如,func modify(num *int)表示定义了一个函数modify,该函数接受一个指向整数类型的指针作为参数。

需要注意的是,指针在使用之前需要先初始化,否则会报错。可以使用new()函数来创建一个指针,并分配内存空间。例如,p := new(int)表示创建了一个指向整数类型的指针,并将其赋值给变量p。

4.注意: 1)可以通过指针改变指向值

 var num int = 10

fmt.Println(num)

var ptr *int = &num

*ptr = 20

 fmt.Println(num)

2)指针变量接收的一定是地址值

image.png

3)指针变量的地址不可以不匹配

image.png

PS:*float32意味着这个指针指向的是float32类型的数据,但是&num对应的是int类型的不可以。

4)基本数据类型(又叫值类型),都有对应的指针类型,形式为*数据类型,

比如int的对应的指针就是int, float32对应的指针类型就是float32。依次类推。

重点:1.&: 取内存地址 2.* :根据地址取值

(二)标识符

1.标识符:用于命名变量、函数、类型等的名称。标识符由字母、数字和下划线组成,并且不能以数字开头。Go语言的标识符是大小写敏感的,也就是说abc和ABC是两个不同的标识符。

2.标识符定义规则: 在命名标识符时,需要遵循一些约定俗成的命名规则,例如:

除了这些约定之外,还有一些关键字不能作为标识符,例如if、for、func等。

1.三个可以(组成部分):数字,字母,下划线_     (字母含义比较宽泛,使用汉字也是可以的,但不建议使用) 

2.四个注意:不可以以数字开头,严格区分大小写,不能包含空格,不可以使用Go中的保留关键字  

3.见名知意:增加可读性 

4.下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。所以仅能被作为占位符使用,不能单独作为标识符使用。

5.可以用如下形式,但是不建议: var int int = 10  (int,float32,float64等不算是保留关键字,但是也尽量不要使用) 

6.长度无限制,但是不建议太长  asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasfd 

7.起名规则: 

(1)包名:尽量保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,和标准库不要冲突 

· 1.为什么之前在定义源文件的时候,一般我们都用package main 包 ? 

main包是一个程序的入口包,所以你main函数它所在的包建议定义为main包,如果不定义为main包,那么就不能得到可执行文件。 

· 2.尽量保持package的名字和目录保持一致 

· 和标准库不要冲突 

(2)变量名、函数名、常量名 : 采用驼峰法。var stuNameDetail string = 'huihui'

驼峰命名法:对于变量和函数名,使用小写字母开头,后续的单词首字母大写,例如myVariable、calculateSum。

使用首字母大写:对于导出的变量、函数和类型,使用首字母大写,表示可以被外部包调用,

使用有意义的名称:命名要具有描述性,能够清晰地表达出变量或函数的用途,避免使用过于简单或模糊的名称。

(3)如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;例如MyVariable、CalculateSum。

如果首字母小写,则只能在本包中使用  (利用首字母大写小写完成权限控制)

总结:

指针是一种特殊的变量,存储了一个变量的内存地址,用于间接访问变量和函数参数传递。

标识符是用于命名变量、函数、类型等的名称,需要遵循一些命名规则和约定。

希望通过本文的讲解,你对Go语言中指针和标识符的概念和用法有了初步的了解。如果你想进一步学习其他特性和语法,可以查阅相关的文档和资料。