复杂数据类型
指针
【1】基本数据类型和内存:
package main
import (
"fmt"
)
func main(){
var age int = 18
//&符号+变量 就可以获取这个变量内存的地址
fmt.Println(&age) //0xc0000a2058
}
内存:
指针变量:
package main
import (
"fmt"
)
func main(){
var age int = 18
//&符号+变量 就可以获取这个变量内存的地址
fmt.Println(&age) //0xc0000a2058
//定义一个指针变量:
//var代表要声明一个变量
//ptr指针变量的名字
//ptr对应的类型是:*int是一个指针类型(可以理解为指向int类型的指针)
//&age就是一个地址,是ptr变量的具体的值
var ptr *int= &age
fmt.Println(ptr)
fmt.Println("ptr本身这个存储空间的地址为:",&ptr)
//想获取ptr这个指针或者这个地址指向的那个数据:
fmt.Printf("ptr指向的数值为:%v",*ptr)//ptr指向的数值为:18
}
内存:
总结:
- &取内存地址
- *根据地址取值
指针的4个细节
【1】可以通过指针改变指向值
【2】指针变量接收的一定是地址值
【3】指针变量的地址不可以不匹配
PS:*float32意味着这个指针指向的是float32类型的数据,但是&num对应的是int类型的不可以。
【4】基本数据类型(又叫值类型),都有对应的指针类型,形式为数据类型,
比如int的对应的指针就是int,float32对应的指针类型就是*float32。依次类推。
标识符的使用
【1】标识符:读音biao zhi fu
【2】什么是标识符?
变量,方法等,只要是起名字的地方,那个名字就是标识符
var age int = 19
var price float64 = 9.8
【3】标识符定义规则:
1.三个可以(组成部分):数字,字母,下划线_
PS:字母含义比较宽泛,使用汉字也是可以的:
不建议使用,建议用字母:26字母
2.四个注意:
不可以以数字开头,严格区分大小写,不能包含空格,不可以使用Go中的保留关键字
3.见名知意:增加可读性
4.下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。
可以代表任何其它的标识符,但是它对应的值会被忽略(比如:忽略某个返回值)。
所以仅能被作为占位符使用,不能单独作为标识符使用。
5.可以用如下形式,但是不建议:
var int int=10(int,float32,float64等不算是保留关键字,但是也尽量不要使用)
6.长度无限制,但是不建议太长asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasfd
7.起名规则:
(1)包名:
尽量保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,和标准库不要冲突
-
1.为什么之前在定义源文件的时候,一般我们都用packagemain包?
main包是一个程序的入口包,所以你main函数它所在的包建议定义为main包,如果不定义为main包,那么就不能得到可执行文件。
-
2.尽量保持package的名字和目录保持一致
-
3.和标准库不要冲突
(2)变量名、函数名、常量名:采用驼峰法。
就是单词按照大写区分开
var stuNameDetail string =“lili"
(3)如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;
如果首字母小写,则只能在本包中使用 (利用首字母大写小写完成权限控制)
注意:
import导入语句通常放在文件开头包声明语句的下面。
导入的包名需要使用双引号包裹起来。
包名是从$GOPATH/src/后开始计算的,使用/进行路径分隔。
需要配置一个环境变量:GOPATH
代码展示:
关键字和预定义标识符
【1】关键字就是程序发明者规定的有特殊含义的单词,又叫保留字。
go语言中一共有25个关键字。
【2】预定义标识符:一共36个预定标识符,包含基础数据类型和系统内嵌函数