开发学院

您的位置:首页>教程>正文

教程正文

Go 语言变量

Go 语言变量

  变量是指定程序操作的存储区域的名称,Go中的每个变量都有一个特定类型,它确定变量的内存的大小和布局;可以存储在该内存中的值的范围;以及可以应用于变量的操作集。

  变量的名称可以由字母、数字和下划线组成,它必须以字母或下划线开始,因为Go是区分大小写的,所以变量名称大小写的意义是不同的.根据前面解释的基本类型,将有以下基本变量类型:

  • byte:字节类型,一个二进制八位数(一个字节)。

  • int:整数类型。

  • float32:单精度浮点数类型。

  Go编程语言还允许定义各种其他类型的变量,其中包括枚举、指针、数组、结构、集合等。对于本章,让我们只研究基本变量类型。

Go语言中声明变量:

  声明变量意味着告诉编译器在哪个地址储存值和为变量创建多大的存储空降。变量定义指定数据类型,并包含该类型的一个或多个变量的列表如下所示:

var variable_list optional_data_type;

  在这里,optional_data_type是一个Go语言数据类型,包括byte、int、float32、complex64、boolean或任何用户定义的对象等。变量列表可能由一个或多个用逗号分隔的标识符名称组成。下面例子展示了一些有效的声明:

var    i, j, k int;
var   c, ch byte;
var  f, salary float32;
d = 42;

  行var I、j、k ;声明并定义了I、j和k的变量,它指定变量I、j和k数据类型为int。

  可以在声明变量的时候同时初始化变量(分配初始值)。变量的类型可以由编译器根据传递给它的值自动判断。初始值设定项由等号组成,例子如下:

variable_name = value;

  下面是一些例子:

d = 3, f = 5;    // declaration of d and f. Here d and f are int

  如果声明变量的时候不指定初始值,那么声明为static的变量默认值为nil; 所有其他变量的初始值是其数据类型的零值.

Static类型声明

  静态变量声明向编译器提供保证,有一个变量存在指定的类型和名称,以便编译器继续进行进一步编译,而不需要有关变量的完整详细信息。变量声明只有在编译时才有意义,编译器在链接程序时需要实际变量声明。

例子

package main

import "fmt"

func main() {
   var x float64
   x = 20.0
   fmt.Println(x)
   fmt.Printf("x is of type %T\n", x)
}

  运行上述代码,如果成功会产生如下输出:

20
x is of type float64

动态类型声明/类型推理

  动态类型变量声明需要编译器根据传递给它的值解释变量类型。编译器不需要变量定义的时候指定类型。

例子

 package main

import "fmt"

func main() {
   var x float64 = 20.0

   y := 42 
   fmt.Println(x)
   fmt.Println(y)
   fmt.Printf("x is of type %T\n", x)
   fmt.Printf("y is of type %T\n", y)
}

  运行上述代码,如果成功会产生如下输出:

20
42
x is of type float64
y is of type int


混合变量声明

  可以在定义变量的时候定义多种不同类型的变量,编辑器会根据各自的值推断。

例子

package main

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo"  
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}

例子

package main

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo"  
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}

  运行上述代码,如果成功会产生如下输出:

3
4
foo
a is of type int
b is of type int
c is of type string

Go中的左值和右值:

  Go中有两种表达式:

  •  左值(lvalue):引用存储器位置的表达式称为“lvalue”表达式。左值可能出现在作业的左侧或右侧。

  •  右值(rvalue):术语右值(rvalue)是指存储在内存中某个地址的数据值。右值是不能赋值给它的值的表达式,右值只可能出现在赋值的右侧而不是左侧。

  变量是左值,因此可能出现在赋值的左侧。数字文字是右值,因此不可能分配,也不能出现在左侧。以下是有效的语句:

x = 20.0

  以下不是有效的语句,并会生成编译时错误:

10 = 20