Go语言中的变量

定义变量的方式有如下4种:

标准格式

var 变量名 变量类型 [= 变量初始值]
var a int = 10

当变量定义时,未设置初始值,会默认的根据变量的类型设置一个初始值。

var 变量名 变量类型
var a int

不同的数据类型的初始值情况如下:

1.整型和浮点型:0,0.0

2.字符串变量:空

3.布尔类型:bool

4.指针、函数:nil

5.数组:[0]

数组的默认值是根据定义的数据类型和数组长度来确定的。示例代码如下:

6.切片:[]

// 变量默认值,示例代码
func main() {
    // 整型默认值
    var a int// 默认值为0
    // 数组的默认值
    var arr[3] int32 // 打印的结果为:[0,0,0]
    // 切片的默认值
    var sli[] int // 打印的结果为:[]
}

简短语法

var 变量名 := 初始值 或 变量名1, 变量名2,变量名3, .... 变量名n = 变量名1值,变量名2值,变量名3值,....变量名n值
var a := 10

使用简短语法需要注意如下几点

  1. := 左侧的变量必须是从未定义过,也就是说变量名必须是全新的一个变量名。

  2. 简短语法只能定义局部变量,而不能定义全局变量。

批量定义

  1. 相同类型的变量(并行声明)

    var 变量名1,变量名2,变量名2.... 变量类型 = 值1,值2,值3,....,变量n
    var a,b,c int = 10,202,30
    
  2. 不同类型的变量(因式分解法)

    var (
        变量名 变量类型 [= 值],
        变量名 变量类型 [= 值],
        变量名 变量类型 [= 值],
        变量名 变量类型 [= 值]
    )
    var (
        a int = 10
        b float32 = 1.0
        c bool
    )
    

因式分解法定义,要手动给每个变量设置一个初始值

// 该方式是错误的,提示syntax error: unexpected newline, expecting type
var (
    a = 10
    b
)

变量的多重赋值

var 变量1,变量2,....变量n int
变量1,变量2,....变量n = 1,2,....,n

多重赋值时需要注意的时,变量的类型一定需要一致

匿名变量

在编码过程中,可能会遇到没有名称的变量、类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代码的灵活性,这些变量被统称为匿名变量。

匿名变量使用”_”代替。

e, _ := 200, 100
f, _, _ := 100, 200, 300

使用匿名变量需要注意如下几点

1.任何类型都可以赋值给匿名变量。

2.赋值给匿名变量的值总将被抛弃。

3.匿名变量的值不能在后续的代码中使用。

4.匿名变量也不能做运算操作。

5.匿名变量不会暂用内容,也不会分配内容,多个匿名变量是不会发生冲突的。

变量的作用域

var a int // 全局变量
func main() {
    var b int // 局部变量
    fu(c) // 形参
}
func fu(d){ // 实参
    return d
}

变量的作用域分为如下几种情况:

1.全局变量。

2.局部变量。

3.参数(形参、实参)。

4.当全局变量和局部变量的名称一致时,则优先使用局部变量。

5.局部变量一旦声明就必须使用,全局变量可以声明不使用。

变量类型转换

go语言中是不存在类型之间进行隐式转换(PHP支持),所有的类型转换必须是显示转换。但是显示转换也是基于数据类型相互兼容的情况下。

这里的数据兼容指的是同一种类型,比如float和int是数字类型,可以转换。int和bool(bool的值只有true和false)不是同一种数据类型,是不能进行转换的。

func main() {
    var a float32 = 1.0// a的默认值是0
    b := int(a)// 打印b的值就是1
}
我来评几句
登录后评论

已发表评论数()

相关站点

热门文章