01go变量和常量

1、变量

变量是为存储特定类型的值而提供给内存位置的名称。在go中声明变量有多种语法。

所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变。

Go 语言 变量 、常量命名规则
1.Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
2.Go 语言中关键字和保留字都不能用作变量名。
3.变量的名字是区分大小写
4.标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
5.变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如 DNS)的时候,特有名词
根据是否私有全部大写或小写。

Go 语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且 Go 语言的变
量声明后必须使用。

1.1 变量声明

//方式一 :var 变量名称 type
var name string
var age int
var isOk bool

//赋值
name = "kaka"
age = 20

//方式二 根据值自行判定变量类型(类型推断Type inference)
var name = value

1.2 一次定义多个变量
// var identifier1, identifier2 type

var username, sex string
uamename = "kaka"
age = 20

//声明变量时赋值
var a, b, c, d = 1, 2, 3, false

1.3 批量声明变量
//批量声明变量
var (
	a string
	b int
	c bool
)

a = "张三"
b = 10
c = true

//批量声明并赋值

var (
a string = "张三"
b int = 20
c bool = true
)

2、变量的初始化

Go 语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被
初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为 0。 字符串变量的默认值
为空字符串。 布尔型变量默认为 false。 切片、函数、指针变量的默认为 nil。

当然我们也可在声明变量的时候为其指定初始值。变量初始化的标准格式如下:
var 变量名 类型 = 表达式

//举例
var name string = "zhangsan"
var age int = 18

//一次初始化多个变量并赋值
var name, age = "zhangsan", 20

有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完
成初始化。

var name = "Q1mi"
var age = 18

3、短变量声明法

在函数内部,可以使用更简略的 := 方式声明并初始化变量。
注意:短变量只能用于声明局部变量,不能用于全局变量的声明

//变量名 := 表达式

func main() {
n := 10
m := 200 // 此处声明局部变量 m
fmt.Println(m, n)
}

//使用变量一次声明多个变量,并初始化变量
m1, m2, m3 := 10, 20, 30

4、匿名变量

在使用多重赋值时,如果想要忽略某个值,可以使用 匿名变量(anonymous variable)。 匿
名变量用一个下划线_表示,例如:

func getInfo() (int, string) {
	return 10, "张三"
}

func main() {
	_, username := getInfo()
	fmt.Println(username)
}

//匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。

5、 注意事项

  • 变量必须先定义才能使用
  • go语言是静态语言,要求变量的类型和赋值的类型必须一致。
  • 变量名不能冲突。(同一个作用于域内不能冲突)
  • 简短定义方式,左边的变量名至少有一个是新的
  • 简短定义方式,不能定义全局变量。
  • 变量的零值。也叫默认值。
  • 变量定义了就要使用,否则无法通过编译。

6、Go 语言中的常量

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的
声明和变量声明非常类似,只是把 var 换成了 const,常量在定义的时候必须赋值。

6.1、使用 const 定义常量
显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"

const pi = 3.1415
const e = 2.7182

const a, b, c = 1, false, "str" //多重赋值

//声明了 pi 和 e 这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。
6.2、多个常量也可以一起声明
const (
	pi = 3.1415
	e = 2.7182
)

//const 。 同时声明多个常量时,如果省略了值则表示和上面一行的值相同。 例如:
const (
	n1 = 100
	n2
	n3
)
//常量 n1、n2、n3 的值都是 100。

常量的注意事项:

  • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

  • 不曾使用的常量,在编译的时候,是不会报错的

  • 显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值

7、iota

iota 是 golang 语言的常量计数器,只能在常量的表达式中使用。
iota 在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量
声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

const (
    a = iota
    b = iota
    c = iota
)

第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:

const (
    a = iota
    b
    c
)
7.1、const iota 使用_ 跳过某些值
const (
	n1 = iota //0
	n2 //1
	_
	n4 //3
)
7.2、iota用法
package main

import "fmt"

func main() {
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //独立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢复计数
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
}

如果中断iota自增,则必须显式恢复。且后续自增值按行序递增

自增默认是int类型,可以自行进行显示指定类型

数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址

7.3、 多个 iota 定义在一行
const (
	a, b = iota + 1, iota + 2 //1,2
	c, d //2,3
	e, f //3,4
)
原文地址:https://www.cnblogs.com/slzhao/p/13289305.html