31

GoLang 学习笔记 - 变量

 5 years ago
source link: https://www.tuicool.com/articles/RfQN3mr
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

  GoLang变量名由字母、数字、下划线组成,其中首个字符不能为数字,其命名规则参考标识符。声明变量的一般形式是使用 var 关键字。

变量声明方式为:

var [变量名] [变量类型] 
// 例
var num int32

可以一次声明多个变量:

var num1, num2, num3 int

变量声明

  GoLang中有多声明变量的方式。

  第一种,只指定变量类型。如果没有初始化,则变量默认为零值(缺省值、默认值)。

var num int32
fmt.Println(num) // 取零值,输出 0

零值

GoLang 中变量的 默认值缺省值 叫做零值

0
false
""

  第二种,根据初始值自行判定变量类型。

var num = 10
fmt.Println(num) // 取初始值,输出 10
fmt.Println(reflect.TypeOf(num)) // 输出 10
var str = "a"
fmt.Println(str) // 取初始值,输出 a
fmt.Println(reflect.TypeOf(str)) // 输出 string
// 使用reflect.TypeOf() 方法需要引入 reflect 包

  第三种,省略 var,用 := 赋值运算符来声明。

num := 10  // 等价于 var num int = 10
fmt.Println(num) // 取初始值,输出 10

并行赋值

可以用用 := 赋值运算符一次声明多个变量

num1, num2 := 10, 20

  右边的这些值以相同的顺序赋值给左边的变量,所以 num1 的值是 10, num2 的值是 20。这被称为 并行赋值同时赋值 `。

注意 := 是个声明语句, := 左侧如果没有声明新的变量,就产生编译错误。

  如:

var num int
num := 10

  这时候会产生编译错误,因为 num 不是新的变量,它已经声明过了,它相当于同一个变量声明了两次。因为这等价于:

var num int
var num int
num = 10

  如果:

var num1 int
num1, num2 := 1, 2

  此时不会产生编译错误,因为 num2 之前并没有声明。此外,如果想要交换两个变量的值:

var a int = 1
var b int = 2
a, b = b, a // a 的值为 2,b的值为 1

  这样可以省去为了交换变量值而声明的第三个变量。 注意,待交换值的变量的类型必须相同,否则编译报错。

  可以使用因式分解关键字的写法声明变量,这种方式一般用于声明全局变量。

var (
    num1 int
    num2 int
)

空白标识符

_, b = 5, 7 // 5 被抛弃

  _ 实际上是一个只写变量,你不能得到它的值。这样做是因为 GoLang中你必须使用所有被声明的变量 (等会会讲) ,但有时你并不需要使用从一个函数得到的所有返回值 (函数篇会讲)

并行赋值也被用于当一个函数返回多个返回值时获取返回结果 (函数篇会讲)*

未使用的变量

  GoLang 中所有已声明的变量必须使用,否则编译报错。

package main

import (
    "fmt"
)

func main() {
    var num = 10
    var str = "a"
    fmt.Println(str)
}

  这个程序会报错: num declared and not used ,意为变量 num 未使用。

  此外, GoLang 中所有已引入的包必须使用,否则编译报错。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var str = "a"
    fmt.Println(str) // 取初始值,输出 a
}

  这个程序会报错: imported and not used: "reflect" ,意为包 reflect 未使用。

默认类型

  使用 [变量名] := [变量值]var [变量名] = [变量值] 方式声明变量的时候,Go 编译器会给予变量一个默认类型,下面几个变量的默认类型为基本数据类型:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var int_num = 10
    fmt.Println(reflect.TypeOf(int_num)) // 输出 int
    var float_num = 0.5
    fmt.Println(reflect.TypeOf(float_num)) // 输出 float64
    var string_str = "a"
    fmt.Println(reflect.TypeOf(string_str)) // 输出 string
    var byte_str = 'a'
    fmt.Println(reflect.TypeOf(byte_str)) // 输出 int32
}

  除非必要(开发文档规范),或是为了节省存储空间,否则建议在用 var [变量名] [变量类型] = [变量值] 方式声明变量时,按照默认类型来声明,可省去诸如类型转换等不必要的麻烦。

    以上内容均源于网络,并加上自己的实践和理解,如有错误的地方,请在评论区指正。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK