Go学习笔记(7)Go的变量与常量

x33g5p2x  于2022-03-06 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(406)

Go的变量

全局变量(在函数体之外的变量)

  • 声明方式:var 变量名 变量类型

  • 赋值:变量名 = 变量的值或表达式

  • 声明的同时赋值:var 变量名 [变量类型] = 变量的值或表达式

  • 变量的类型可以省略,由系统自动推断

var a int = 1
var b = 2.1
  • 多个全局变量的声明可以使用var()合并(当然也能同时赋值)
var (
	a int
	b bool
	str string
)

除了使用var()合并的方式,也可以使用并行的方式:

var a, b, c int
a, b, c = 1, 2, 3

局部变量(函数体内或者方法体内)

  • 可以和上面的全局变量一样,使用var 变量名 [变量类型] = 变量值或表达式 这种方式来声明和赋值
  • 除了以上的方式,还可以使用:=的形式简写(可以省略掉var关键字,这种方式只能是局部变量使用)
a := 1
b := "hello"
  • 多个局部变量的声明不可用var()这种方式,只能使用并行方式,可以结合简写形式使用
a, b, c := 1, 2, "abc"

需要注意几点

  • 如果声明了一个局部变量却没有在代码块中使用它,会得到编译错误:变量名 declared but not used (坚决不冗余~~~)
  • 如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明(赋值可以)
  • 所有变量都可以使用类型推断(但是一些特定类型如int32这种就难以自动推断了)
  • 尽管变量的标识符必须是唯一的,但你可以在某个代码块的内层代码块中使用相同名称的变量,则此时外部的同名变量将会暂时隐藏(结束内部代码块的执行后隐藏的外部同名变量又会出现,而内部同名变量则被释放),你任何的操作都只会影响内部代码块的局部变量
  • 可以使用_来表示抛弃值
_, a = 1, 2

类型转换

  • Go中不存在隐式转换,所有类型转换必须显示声明
  • 转换只能发生在两种相互兼容的类型之间 (比如数值型和布尔型之间就无法转换)
  • 类型转换的格式:变量A = 类型(变量B)
var a float32 = 1.1
b := int(a)

Go的常量

  • 常量使用关键字const定义,用于存储不会改变的数据
  • 常量的定义格式与变量基本相同,const 常量名 [常量类型] = 常量值,其中常量类型可以省略,由系统自动推断
const PI = 3.141592658
const str string = "hello"
  • 多个常量的定义方式同多个变量的定义方式类似,如果有多个常量需要定义赋值,可以使用const()常量组的方式合并。
const(
	PI = 3.141592658
	str = "hello"
)

如果不提供初始值,将使用上行常量的值:

const(
	a = "A"
	b                             // b为 “A”
)
  • 常量的值必须在编译时就能确定,可以在赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得
  • 自定义的函数在编译期间均属于未知,因此无法用于常量的赋值,但一些内置函数比如len()就可以使用
  • 反斜杠\在常量表达式中可以作为多行的连接符使用
const c = 0.4232324242328786350073402\
		  378371802711809823413478937
  • 使用常量来用作枚举
const (
	Spring = 1
	Summer = 2
	Autumn = 3
	Winter = 4
)

除了上面这种写法,还可用常量的计数器iota来操作,它从0开始,常量组中每定义一个新的常量,该值自动加1。每当遇到一个新的const关键字,iota的值会重置为0。上面的枚举可以用下面的形式来表示(SummerAutumnWinter 没有赋值,它们的值取上一行的值,即iota

const (
		Spring = iota                  //Spring=iota=0
		Summer                         //Summer=iota=1
		Autumn                        //Autumn=iota=2
		Winter                        //Winter=iota=3
)
const (                               //这里新定义了一个常量组,iota的值置为0
	Man = iota                        //Man=iota=0                        
	Female                            //Female=iota=1
)

相关文章