Go核心编程(4)—— 入门篇之指针、类型介绍和标识符命名规范
指针
基本介绍
1、基本数据类型,变量存的就是值,也叫值类型
2、获取变量的地址,用&,比如var num int,获取num的地址:&num
3、指针类型,变量存的是一个地址,这个地址指向的空间存的才是值,比如:var ptr *int = &num
4、获取指针类型所指向的值,使用:*,比如:var *ptr int,使用 *ptr获取p只想的值
5、举例说明
package main
import (
"fmt"
)
func main (){
var i int = 10
//i的地址是什么,&i
fmt.Println("i的地址=", &i)
//下面的var ptr *int = &i
//1.ptr是一个指针变量
//2.ptr的类型 *int
//3.ptr本身的值 &i
var ptr *int = &i
fmt.Printf("ptr=%v\n", ptr)
fmt.Printf("ptr的地址=%v\n", &ptr)
fmt.Printf("ptr指向的值=%v", *ptr)
}
指针变量在内存中的内存布局
使用案例
package main
import (
"fmt"
)
func main (){
var num int = 1
fmt.Printf("num的地址=%v\n",&num)
var ptr *int
ptr = &num
*ptr = 2 //此处修改了Num的值
fmt.Printf("num的值=%v\n",num )
}
指针细节说明
1、 值类型都有对应的指针类型,表达式为数据类型,比如int的对应指针类型是int
2、 值类型包括:基本数据类型int、float、bool、string、数组和结构体struct
值类型和引用类型
值类型和引用类型的说明
1、值类型:基本数据类型int、float、bool、string、数据和结构体struct
2、引用类型:指针、slice切片、map、管道chan、接口interface等都是引用类型
值类型和引用类型使用特点
1、值类型:变量直接存储值,内存通常再栈中分配
2、引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收
标识符的命名规范
标识符概念
1、Go中对各种变量、方法、函数等命名时使用的字符序列称为标识符
2、凡是自己可以起名字的地方都叫标识符
标识符的命名规则
1、由26个英文字母大小写,0-9,_组成
2、数字不可以开头
3、Go中严格区分大小写
4、标识符不能包含空格
5、下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其他的标识符,但是它对应的值会被忽略(比如,忽略某个返回值)。所以仅能被作为占位符使用,不能作为标识符使用。
6、不能以系统保留关键字作为标识符,例如break,if等
标识符命名注意事项
1、包名:保持package的名字和所在目录文件夹保持一致,尽量采取有意义的包名,简短,有意义,不要和标准库冲突
2、变量名、函数名、常量名:采用驼峰法
3、如果变量名、函数名、常量名首字母大写,则可以被其他的包访问;如果首字母小学,则只能在本包中使用(首字母大写是公有的,首字母小写是私有的)
系统保留关键字
在Go中,为了简化代码编译过程中对代码的解析
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
预定义标识符
除了保留关键字以外,Go还提供了36个预定义标识符,其中包括技术出具类型和系统内嵌函数
append | bool | byte | cap | close | complex |
---|---|---|---|---|---|
complex64 | complex128 | uint16 | copy | false | float32 |
float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new |
nil | panic | uint64 | println | real | |
recover | string | true | uint | uint8 | uintprt |