Golang系列之变量的基本使用

x33g5p2x  于2022-02-07 转载在 Go  
字(2.3k)|赞(0)|评价(0)|浏览(392)

1、变量的定义

无论使用哪种高级语言,变量都是程序的基本单元。变量表示内存中,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。

2、变量的使用步骤

  • 声明变量
  • 初始化或赋值
  • 使用变量
  1. package main
  2. import "fmt"
  3. func main() {
  4. var i int
  5. i = 10
  6. fmt.Println("i=" + i);
  7. }

3、变量声明

基本语法:var [变量名] [类型]

eg:var a int声明了一个变量a,为int类型

多变量声明,go支持使用一个var声明多个变量,使用括号就行

  1. var (
  2. v1 int
  3. v2 string
  4. )

4、变量初始化

对变量进行初始化处理,有3种方式

  1. // 方式1:常规操作,按照规范
  2. var v1 int = 1
  3. // 方式2:省略类型,编辑器会根据赋值定位为int类型
  4. var v2 = 1
  5. // 方式3:省略var和类型,编辑器自动推导出int类型
  6. v2 := 1

go语言不写类型这个特点就像JavaScript等动态语言有点像了,不过go是属于静态语言,因为go编辑器会根据赋值推导出类型

注意点,使用:=符号应该注意,在:=符号左边的变量应该是未声明过的,不然会报错

  1. var a int
  2. a := 1

no new variables on left side of :=

5、变量赋值

变量的初始化和操作是两个不同的概念,初始化只有一次,赋值可以有多次

  1. var v1 int
  2. v1 = 10

注意点,变量不能随便更改类型

  1. var a int = 1
  2. a = 2
  3. a = 3
  4. // 变量已经定义为int类型,不能随便更改类型为float
  5. a = 3.1

异常提示:constant 3.1 truncated to integer

  • 变量多重赋值
    go提供了很好用的多重赋值功能,使用多重赋值,可以对两个变量进行互换
  1. i, j = j, i

没有这个功能的语言,比如PHP或者java只能通过一个临时变量进行互换

  1. temp = i;
  2. i = j;
  3. j = temp;

6、匿名变量

匿名变量通过下划线_来声明,赋予它的值都会被丢弃。这种变量的好处是可以避免声明过多变量,只声明需要调用的变量。在其它语言中,有时候函数返回多个值,需要定义多个用不到变量进行接收,而go语言而提供了这种方法进行处理

  1. func main() {
  2. // 只获取需要的用户名
  3. userName,_ := GetUserInfo()
  4. fmt.Println(userName)
  5. }
  6. func GetUserInfo() (userName string , password string) {
  7. return "admin", "pwd"
  8. }

7、变量的作用域

go和其它语言一样,也有全局变量和局部变量,声明在函数体之外的都是全局变量,这个变量可以在整个文件里使用,如果要跨包或者说是跨文件调用,必须声明为大写的,有点类似于java中的public变量,声明为大小的全局变量之后,就可以在其它package里调用;然后局部变量就是声明在函数体内的变量,局部变量只能在对应的函数里调用

8、常量的使用

在go语言中,常量是指在编译期就已知且不可以改变的值,常量只可以是数值类型(括整型、 浮点型和复数类型)、布尔类型、字符串类型等标量类型。

常用使用const进行声明,语法是const [常量名] [类型],类型有时候可以省略,直接赋值,go编辑器会自行进行推导

  • 定义多个常量
  1. const (
  2. size int64 = 1024
  3. flag = -1
  4. )
  • 多重赋值
  1. const a,b,c = 1 , 2, "foo"
  • 预定义常量
    Go 语言预定义了这些常量:true、false 和 iota。true、false比较常见,下面主要看看iota
  • iota 常量生成器
    常量声明可以使用iota常量生成器进行数据初始化,用于生成一组以相似规则初始化的常量。一般在const声明后会被初始化值为0,在下一个const声明之前,每调用一次,按照规则进行赋值
  1. const (
  2. c1 = iota // 0
  3. c2 = iota // 1
  4. c3 = iota // 2
  5. )
  6. const (
  7. c4 = 1 << iota // 1
  8. c5 = 1 << iota // 2
  9. c6 = 1 << iota // 4
  10. )
  11. const (
  12. c7 = iota * 2 // 0
  13. c8 = iota * 2 // 2
  14. c9 = iota * 2 // 4
  15. )
  16. const a = iota // 0

const多重赋值,如果两个赋值表示式一样,就可以进行省略,所以上面例子就可以进行修改

  1. const (
  2. c1 = iota // 0
  3. c2 // 1
  4. c3 // 2
  5. )
  6. const (
  7. c4 = 1 << iota // 1
  8. c5 // 2
  9. c6 // 4
  10. )
  11. const (
  12. c7 = iota * 2 // 0
  13. c8 // 2
  14. c9 // 4
  15. )

利用这个特性,可以进行多常量定义,可以实现类似于java中枚举的效果,如下代码,进行常量定义,并按0~6的顺序赋值

  1. type Weekday int
  2. const (
  3. Sunday Weekday = iota
  4. Monday
  5. Tuesday
  6. Wednesday
  7. Thursday
  8. Friday
  9. Saturday
  10. )

还有更复杂点的例子,来自《go语言圣经》

  1. const (
  2. _ = 1 << (10 * iota)
  3. KiB // 1024
  4. MiB // 1048576
  5. GiB // 1073741824
  6. TiB // 1099511627776 (exceeds 1 << 32)
  7. PiB // 1125899906842624
  8. EiB // 1152921504606846976
  9. ZiB // 1180591620717411303424 (exceeds 1 << 64)
  10. YiB // 1208925819614629174706176
  11. )
  • 常量作用域
    常量的作用域也是根据大小写进行判定,大写的可以挎包调用,小写的只能在本包调用

9、程序中加号使用

  • +号两边都是整型做加法运算
  • 当两边都是字符串,做字符串拼接

相关文章

最新文章

更多