变量、类型、指针
目录:
1:
var name string name = "cfp" fmt.Println("name:", name) //name: cfp fmt.Printf("name:%s\n", name) //name:cfp
func main() { var name string name = "cfp" fmt.Println("name:", name) //name: cfp var age = 80 //第二种 fmt.Printf("name:%s,age:%d\n", name, age) //name:cfp }
func main() { sex := "male" //第三种 fmt.Println(sex) }
i,j := 10,20 i,j:=j,i (不借助中间变量,直接对换两个变量的值)
要知道如果要定义全部变量的话,必须使用var 关键字,不能用我们常用的那种赋值
二、基础类型
Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。
计算机中数据存储的最小单位为bit(位),0或者1
byte:计算机中数据的基本单元,1字节=8bit,数据在计算机中存储或者计算,至少为1个字节
-
bool
-
string
-
-
uint(无符号整数)、uint8、uint16、uint32、uint64、uintptr
-
byte //
uint8 的别名
-
rune //
int32 的别名 代表一个 Unicode 码
-
float32、float64
-
complex64、complex128
有符号和无符号的区别:int8 范围 -128-127,uint8 范围:0-255
当一个变量被声明之后,系统自动赋予它该类型的零值:
int 为 0
,float 为 0.0
,bool 为 false
,string 为空字符串
,指针为 nil
所有的内存在 Go 中都是经过初始化的。
package main import "fmt" var age int func main() { fmt.Println(age); }
三、自增、指针
3.1:自增
3.2:指针
定义一个空指针:
package main import "fmt" func main() { //可以返回栈上的指针,编译器在编译的这段代码的时候,会自动判断这段代码,将city分配到堆上。 result := test() fmt.Println(*result) } //在c语言里面,我们在方法里定义了一个变量city,如果函数执行完了,是会释放掉这个变量。 //那么就会返回一个空指针回去! //但是在go里面,让不会返回空指针,他会保存这个变量将栈上的指针进行返回(没用东西都是放到栈上) func test() *string { city := "深圳" ptr := &city return ptr }
变量、指针和地址三者的关系是,每个变量都拥有地址,指针的值就是地址
func main() { // 指针与变量 var room int = 10 // room房间 里面放的 变量10 var ptr = &room // 门牌号px 指针 0xc00000a0a8 fmt.Printf("%p\n", &room) // 变量的内存地址 0xc00000a0a8 fmt.Printf("%T, %p\n", ptr, ptr) // *int, 0xc00000a0a8 fmt.Println("指针地址",ptr) // 0xc00000a0a8 fmt.Println("指针地址代表的值", *ptr) // 10 }
3.3:空指针
- C 语言判断是不是空指针用 null
- C++语言判断是不是空指针用 nullptr
- go语言判断是不是空指针用 nil
func main() { name := new(string) //定义一个字符串的空指针 *name = "呵呵" fmt.Println(name) //0xc000010230 if name != nil{ fmt.Println("name not nil") } }