Go-变量
2020-03-30 本文已影响0人
d4peng
变量
变量声明
- 变量的声明必须是显示的声明
- 声明的变量必须要在代码段使用
- 变量类型在后,变量名称在前面
- 当变量声明后,所有的变量都会在内存中被初始化。例如: int类型为0,string类型为空字符串,指针类型为nil
标准格式声明变量
var name string
var v1,v2 string
上述代码第一行是声明单个变量,第二行代码是声明两个变量叫做v1,v2都是string类型,同时声明多个变量
批量格式声明变量
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
使用关键字var以及括号,可以将变量定义放在一起。
简短格式
shortStyle := "d4peng"
fmt.Println(shortStyle)
简短格式即声明了变量,又对变量进行了初始化赋值(必须是显示化初始),只能在函数内部进行使用
因为简洁灵活的特点,简短变量被广泛的运用于大部分的局部变量初始化,因为var需要声明类型,当类型发生改动后,变量的类型也需要进行改动,所以建议使用简短格式
变量初始化
变量初始化的标准格式
var v string = "HelloWorld"
编译器推导类型的格式
var v = "HelloWorld"
// 3.14会被编译器推导成float64,如果不需要,可以直接变成float32
var f float32 = 3.14
在编译原理中,等号右边的部分叫做右值
短变量声明并初始化
// 编译器会自动依据右值类型判断出左值对应的类型
hp := 100
如果使用:=
这种符号,左边的变量必须是没有定义过的,因为该符号意思就是声明+赋值
conn, err := net.Dial("tcp","127.0.0.1:8080")
简短变量在实际开发中使用的例子非常普遍
conn1, err := net.Dial("tcp","127.0.0.1:8080")
conn2, err := net.Dial("tcp","127.0.0.1:8080")
上述代码中,err这个变量被声明了两次,conn1,conn2被声明了多次,只要左边存在一个新声明的变量,编译器就不会报错
多个变量同时赋值
基于变量交换的demo
var a = int 100
var b = int 200
var c int
c = a
a = b
b = c
fmt.Println(a, b)
Go语言中变量的交换
var a = int 100
var b = int 200
a,b = b,a
fmt.Println(a, b)
匿名变量(没有名字的变量)
因为在Go语言中,变量一旦显式的定义,就需要被使用,但是有些变量可能是不需要被使用的,例如:err这种,有时候是不会出现的,直接使用_来代替这个变量就可以了,因为不需要使用。
Go语言变量的作用域
局部变量
在函数体内,函数的形数和返回值变量都属于局部变量
局部变量不是一直存在的,当定义它的函数被调用后存在,当函数调用结束后,就会被销毁
package main
import "fmt"
func main() {
shortStyle := "d4peng"
fmt.Println(shortStyle)
}
当这个main函数结束之后,里面的shortStyle就会被销毁
全局变量
package main
import "fmt"
var globalVar int
func main() {
shortStyle := "d4peng"
s := "da,s"
globalVar = 999
fmt.Println(shortStyle, s)
}
定义了一个全局变量globalVar,当这个变量结束之后,该变量不会被销毁,还会继续存在
package main
import "fmt"
var globalVar int
func init() {
globalVar = 888
}
func main() {
globalVar := 999
fmt.Println(globalVar)
}
上述代码在main函数中,会优先考虑局部定义的globalVar
,然后才会考虑的全局变量,两者不会发生冲突
形式参数
形参只有在函数调用时才会生效,函数调用结束后,就会被销毁。在函数未被调用的时候,形参并不会占用实际的存储单元,也没有实际的值,实际上就是不存在的。