当前位置:   article > 正文

go的基本语法介绍之变量的声明与初始化_go 变量初始化

go 变量初始化

1.常见基本数据类型

uint8:无符号8位整形,取值范围:0-255

uint16:无符号16位整形,取值范围:0-65535

uint32:无符号32位整形,取值范围:0-4294967295

uint64:无符号64位整形,取值范围:0-18446744073709551615

uint:32 或 64 位

int8:有符号8位整形,取值范围:-128-127

int16:有符号16位整形,取值范围:-32768-32767

int32:有符号32位整形,取值范围:-2147483648-2147483647

int64:有符号64位整形,取值范围:-9223372036854775808-9223372036854775807

int:与uint一样大小

byte:类似 uint8

rune:类似 int32

float32:32位浮点类型

float64:64位浮点类型

string:字符串

bool:布尔类型,取值true或false

2.变量

Go 语言变量名由字母、数字、下划线组成,首字符不能为数字,不能使用关键字作为变量名。

Go语言中的25个关键字:

3.变量的声明与初始化

在 HelloGo 中,我们已经声明了不少的变量,样式如下所示:

var input string

上述代码中声明了一个 string 类型,变量名为 input 的变量。Golang 在声明变量时,会自动把变量对应的内存区域进行初始化操作,每个变量会被初始化为其类型的默认值。变量声明样式如下所示:

var name T

一些常见的变量的声明样式如下:

  1. var a int //声明一个 int 类型的变量
  2. var b string //声明一个 string 类型的变量
  3. var c []float //声明一个 float 类型的切片
  4. var d struct{ // 声明一个匿名结构体,该结构体有一个 int 类型的字段
  5. x int
  6. }
  7. var e func() bool //声明一个函数变量
  8. var (
  9. f int
  10. g string
  11. )
  12. // 同时声明多组变量

在 Golang 中,每一个声明的变量都必须被使用,否则会编译不通过。

对变量进行声明之后,我们还需要对变量空白的内存区域进行初始化,也就是赋值。与其他的语言一致,通过 = 赋值符号初始化,如下例子:

var a int = 100

上述代码中,声明了一个 int 类型的 a 变量,并将其赋值为 100。变量初始化的样式为:

var name T = 表达式

当然可以利用 Golang 提供的类型推导语法糖特性,精简为以下的样式:

  1. var a = 100
  2. b := "Hello"

 在省略了类型属性后,编译器会尝试根据等号右边的表达式推导出变量的类型。注意在使用 := 短变量声明初始化时,左值中的变量最少有一个变量必须是未定义过的变量,否则会出现编译错误。同时 := 不能出现在全局变量的声明和初始化中。

  1. var a = 100
  2. a := 100 //编译报错
  3. a, b := 100, "OK" //无异常

在上述代码中,a := 100 会在编译过程中抛出 no new variables on left side of := 的报错;而 a, b := 100 不会。

我们可以尝试运行 Variable 中的代码,看一下编译器的类型推导结果。

  1. // Variable.go
  2. package main
  3. import "fmt"
  4. func main() {
  5. var a int = 100
  6. var b = "100"
  7. c := 0.17
  8. fmt.Printf("a value is %v, type is %T\n", a, a)
  9. fmt.Printf("b value is %v, type is %T\n", b, b)
  10. fmt.Printf("c value is %v, type is %T\n", c, c)
  11. }

输出结果如下:

  1. a value is 100, type is int
  2. b value is 100, type is string
  3. c value is 0.17, type is float64

从上述表示结果可以看到,变量都被赋予了正确的变量类型。需要注意的是,为了提供精度,浮点数类型会被默认推导为 float64

与 C 语言相比,除了类型推导的语法糖特性,Golang 还提供了多重赋值和匿名变量的语法糖特性。

在过去的编程语言中,如果我们想要交换变量的值,就需要借助一个第三方临时变量来实现,如下例子所示:

  1. var a int = 1
  2. var b int = 2
  3. var tmp int
  4. tmp = a
  5. a = b
  6. b = tmp

在 Golang 中,我们可以通过多重赋值的特性轻松实现类似的变量交换任务,如下所示:

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

在多重赋值的过程中,变量的左值和右值按照从左往右的顺序赋值。

在 Golang 中,被声明的变量必须被使用,否则会被编译器抛出异常。Golang 支持函数多返回值和上面所说的多重赋值,但是有些时候我们不需要使用某些左值,可以使用匿名变量处理,具体例子如 Anonymous.go 所示:

  1. package main
  2. import "fmt"
  3. // 返回一个人的姓和名
  4. func getName() (string, string){
  5. return "王", "小二"
  6. }
  7. func main() {
  8. surname, _ := getName()
  9. _, personalName := getName()
  10. fmt.Printf("My surname is %v and my personal name is %v", surname, personalName)
  11. }

4.统计某个数据类型占的字节数

 导包 import "unsafe"

使用导包当中的函数

unsafe.Sizeof(变量)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/574352
推荐阅读
相关标签
  

闽ICP备14008679号