大头先生的博客

Go圣经笔记

2 命名、声明、变量

一、命名

1.Go中区分大小写;定义在函数内部的名字,只能在函数内部访问;定义在函数外部,当前包中所有文件都可以访问。
定义在包外的名字且以大写字母开头,则可以被包外访问,包本身一般为小写字母。
名字的长短取决于名字的作用域和生命周期
2.推荐使用驼峰式命名,,由多个单词组成,优先使用大小写字母分割

二、声明、变量

1.包级各种类型变量声明顺序不重要,但函数中先声明再使用
2.声明语法:var 变量名字 变量类型 = 表达式,其中类型或=表达式可以省略其中一个,可以根据类型初始化变量或者值推断类型;数值默认:0,布尔类型:false,字符串:空,接口或引用(slice、指针、map、chan、函数):nil,数组或结构体是每个元素对应的零值。
3.一个语句中可以声明多个不同类型的变量,类型由初始化表达式推导
4.包级别声明的变量会在mian执行前完成初始化,局部变量在声明语句被执行到时完成初始化,也可以由函数返回值初始化。
5.函数内部可以使用简短变量声明来声明和初始化变量,语法为 :=
6.var形式的声明一般用于需要显式指定变量类型或者变量稍后赋值而初始值不重要的地方
7. value1,value2 := 这种简短变量声明方式至少要声明一个新的变量,否则无法通过编译。

new函数:new(T)创建一个T类型的匿名变量,初始化为T类型的零值,返回变量地址,指针类型为*T

声明周期

包级变量的生命周期和程序的运行周期是一致的;局部变量的生命周期:从变量声明开始到不再引用结束,函数的参数变量和返回值变量都是这样的。

赋值

x = 1 // 命名变量的赋值
*p = true // 通过指针间接赋值
person.name = "bob" // 结构体字段赋值
count[x] = count[x] * scale // 数组、slice或map的元素赋值
count[x] *= scale
这样可以省去对变量表达式的重复计算;此外,数值变量也可以支持 ++ 递增和 -- 递减语句,值得注意的是:自增和自减是语句,而不是表达式,因此 x = i++ 之类的表达式是错误的。

元组赋值

语法: x,y = y,x ; 允许同时更新多个变量的值。在赋值之前,先计算赋值语句右边的表达式的值,然后再统一更新左边对应变量的值,对于同时处理出现在赋值语句两边的变量很有帮助。
不管是显式还是隐式的赋值,赋值语句左边的变量和右边最终求到的值必须有相同的数据类型,即右边的值对左边变量是可赋值的,赋值语句才是允许的;不同类型的可赋值性规则不同,每个新类型会专门解释。
目前已经讨论过的类型的赋值规则:类型必须完全匹配,nil可以赋值给任何指针或引用类型的变量;常量的赋值规则更加灵活,可以避免不必要的类型转换。
==和!=:进行比较的能力也和可赋值能力有关系:对于任何类型的值进行相等比较,第二个值对第一个类型对应的变量必须是可赋值的。

类型

posted on 2021-12-01 15:27  大头先生的博客  阅读(53)  评论(0编辑  收藏  举报

导航