GoLang 学习笔记 - 变量

凉丶心园 · · 637 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

变量声明方式为:

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

可以一次声明多个变量:

var num1, num2, num3 int

变量声明

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

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

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

零值

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

  1. 数值型(包括complex64/128)零值为 0
  2. 布尔型零值为 false
  3. 字符串零值为 ""(空字符串)

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

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 [变量名] [变量类型] = [变量值] 方式声明变量时,按照默认类型来声明,可省去诸如类型转换等不必要的麻烦。




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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:凉丶心园

查看原文:GoLang 学习笔记 - 变量

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

637 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传