在Go语言中变量是有明确类型的,它跟传统编译形语言一样属于静态类型语言,运行时编译器会自动检测变量的类型。
变量使用注意事项
-
在Go语言中声明的变量必须要使用,因为Go语言在编译时检查变量是否使用过,一旦出现未使用过的变量就会编译错误。
-
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量/** *下面例子中定义了 a b c 三个变量,只有当main函数被调用后存在, * 函数调用结束后 a b c 三个局部变量会自动销毁 */ func main() { var a int = 100 var b int = 200 var a int = a + b fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c) }
-
全局变量
在函数体外定义的变量称为全局变量,全局变量必须 使用var
关键字定义,全局变量首字母必须要大写
。全局变量只要在一个源文件中定义,在外部包中只要引入了(import
)该定义文件都可以使用这个全局变量。// 全局变量定义示例 var GlobalVariable string = "这是一个全局变量"
-
形式参数
在函数中定义的参数叫做形参,在函数未被调用前,不占用任何空间,也不存储实际的值。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁。// 形式参数会作为函数的局部变量来使用 // n1 和 n2 都为形参,只有当 getSum函数被调用时才会为n1和n2赋值 // 当getSum函数执行结束,n1和n2会自动销毁 func getSum(n1 int, n2 int) { }
命名方式
变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例:userName
变量初始化值
基本数据类型
1. bool 布尔类型
2. string 字符串
3. int、int8、int16、int32、int64 整形
4. uint、uint8、uint16、uint32、uint64、uintptr 无符号整形
5. byte // uint8 的别名
6. rune // int32 的别名 代表一个 Unicode 码
7. float32、float64 浮点形
8. complex64、complex128 复数类型
所有的内存在 Go 中都是经过初始化的,当一个变量被声明之后,系统自动赋予它该类型的零值:
int: 0
float: 0.0
bool:false
string: ""
指针: nil 等。
声明变量方式
-
指定变量类型
// var是申明变量关键字; variableName是变量名; type是指定变量的类型 var variableName type
-
编译器推导类型的格式(不显示声明类型,根据变量值自动推断出变量类型)
//声明一个variableName 赋值一个字符串,这时候变量类型是 string类型 func main() { // 在标准格式的基础上,将 int 省略后,编译器会尝试根据等号右边的表达式推导 hp 变量的类型。 var variableName = "string" fmt.Printf("variableName 变量的数据类型是:%T", variable) // 结果:variableName 变量的数据类型是:string }
-
省去var关键字
// variable是变量名,右边是给变量赋值,以字符串为例 func main() { // 这是Go语言的推导声明写法,编译器会自动根据右值类型推断出左值的对应类型。 variable := "string" fmt.Printf("variableName 变量的数据类型是:%T", variable) // 结果:variableName 变量的数据类型是:string }
-
批量定义变量
func main() { var ( age int name string address string ) fmt.Printf("age变量类型: %T; name变量类型: %T; address变量类型: %T", age, name, address) // 结果:age变量类型: int; name变量类型: string; address变量类型: string }