变量
变量:赋值后,可以改变值的标识符。 建议采用驼峰命名法。
var a // 错误,无法推测类型 var b int // 正确,只声明,会自动赋为该类型的零值 var c, d int // 正确,声明连续的同类型变量,可以一并声明,会自动赋为该类型的零值 var b = 200 // 错误,b多次声明,第二行已经声明过了
// 初始化:声明时一并赋初值 var a int = 100 // 正确,标准的声明,并初始化 var b = 200 // 正确,编译根据等式右值推导左边变量的类型 var c = nil // 错误,非法,nil不允许这样用 var d, e int = 11, 22 // 正确
// 用var声明,立即赋值,或之后赋值 var b int // 正确,只声明,会自动赋为该类型的零值 b = 200 b = 300 b = "4" // 错误,类型错误
// 批量赋值 var a int, b string // 错误,批量不能这么写 var ( // 正确 a int b string ) var ( // 错误,变量必须有类型,但没有给类型,也不能使用值来推导类型 a b ) var a int, b string = 111, "abc" // 错误,多种类型不能这么写,语法不对 var ( a int = 111 b string = "abc" ) // 正确,建议批量常量、变量都这么写 var ( a = 111 b = "abc" ) // 正确,类型推导
// 短格式 Short variable declarations // _ 空白标识符,或称为匿名变量 a := 100 b, c := 200, "xyz" // 交换 b, c = c, b d, _, f := func() (int, string, bool) { return 300, "ok", true }()
_下划线
是空白标识符(Blank identifier), 官方文档:https://golang.google.cn/ref/spec#Declarations_and_scope https://golang.google.cn/ref/spec#Blank_identifier
下划线和其他标识符使用方式一样,但它不会分配内存,不占名词空间;
为匿名变量赋值,其值会被抛弃,因此,后续代码中不能使用匿名变量的值,也不能使用匿名变量 为其他变量赋值。
短格式
使用 := 定义变量并立即初始化 只能用在函数中,不能用来定义全局变量 不能提供数据类型,由编译器来推断。
零值
变量已经被声明,但是未被显式初始化,这是变量将会被设置为零值。其它语言中,只声明未初始化的 变量误用非常危险,但是,Go语言却坚持“零值可用”理念。
int为0 float为0.0 bool为false string为空串""(注意是双引号) 指针类型为nil
标识符本质
每一个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,程序员就可以通过其对应的标 识符来访问数据,标识符就是一个指代。一句话,标识符是给程序员编程使用的。
变量可见性
1、包级标识符: 在Go语言中,在.go文件中的顶层代码中,定义的标识符称为包级标识符。如果首字母大写,可在包外 可见。如果首字母小写,则包内可见。
// 无类型常量定义 var a = 20 // int var b = 3.14 // float64 // 指定类型 var a int32 = 20 var b float32 = 3.14
// 延迟初始化需要指定类型,用零值先初始化,因为不给类型,不知道用什么类型的零值 // 有相同关系的声明可以使用同一批定义 var ( name string age int )
使用建议:
顶层代码中定义包级标识符,首字母大写作为包导出标识符,首字母小写作为包内可见标识符; const定义包级常量,必须在声明时初始化; var定义包级变量; 可以指定类型,也可以使用无类型常量定义。 延迟赋值必须指定类型,不然没法确定零值。 有相关关系的,可以批量定义在一起, 一般声明时,还是考虑“就近原则”,尽量靠近第一次使用的地方声明。
2、局部标识符: 定义在函数中,包括main函数,这些标识符就是局部标识符。
使用建议:
在函数中定义的标识符; const定义局部常量; var定义局部变量; 可以指定类型,也可以使用无类型常量定义。 延迟赋值必须指定类型,不然没法确定零值; 有相关关系的,可以批量定义在一起 在函数内,直接赋值的变量多采用短格式定义。
布尔型
类型bool,定义了2个预定义常量,分别是true、false。
数值型
复数:complex64、complex128
整型:
与其他语言不同,即使同是整型这个大类中,在Go中,也不能跨类型计算。需强制类型转换,把一个值从一个类型强制转换到另一种类型,有可能转换失败。
长度不同:int8、int16(C语言short)、int32、int64(C语言long)
长度不同无符号:uint8、unit16、uint32、uint64;byte类型,它是uint8的别名;rune类型,它是int32的别名;
自动匹配平台:int、uint int类型它至少占用32位,但一定注意它不等同于int32,不是int32的别名。要看CPU,32位 就是4字节,64位就是8字节。但是,也不是说int是8字节64位,就等同于int64,它们依然是不同类型!
进制表示:
十六进制:0x10、0X10
八进制:0o10、0O10。010也行,但不推荐
二进制:0b10、0B10
标签:变量,int,var,类型,go,标识符,定义 From: https://www.cnblogs.com/caibao666/p/17420725.html