位置:首页 > 高级语言 > Go语言在线教程 > Go语言变量

Go语言变量

变量是什么,只不是给定到存储区域,我们的程序可以操纵的名称。在Go中每个变量具有特定的类型,它确定的大小和可变的存储器的布局;能确定存储器内存储的值的范围;和组操作可以施加到变量。

一个变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因为Go是区分大小写的。基于该基本类型在前面的章节中说明的那样,将有以下基本变量类型:

类似 描述
byte 通常单个字节(一个字节),这是一个字节的类型
int 整数最自然的尺寸的机器
float32 单精度浮点值

Go编程语言也可以定义各种其他类型的变量,我们将在以后的章节列出,如:枚举,指针,数组,结构,联合,等等。对于本章覆盖,让我们只学习研究的基本变量类型。

在Go中变量定义:

一个变量的定义是指,告诉编译器在哪里,有多少创建存储变量。变量定义指定一个数据类型,并且包含的该类型,如下的一个或多个变量的列表:

var variable_list optional_data_type;

在这里,optional_data_type可以包括字节,整型,float32,complex64,布尔或任何用户定义的对象等有效Go的数据类型,variable_list可以由用逗号分隔的一个或多个标识符名称。一些有效的声明如下所示:

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 

对于没有初始化定义:具有静态存储时间变量的隐含零初始化(所有字节的值为0);所有其它变量的初始值是它们的数据类型的零值。

静态类型声明

静态类型的变量声明保障到编译器,有一个变量存在具有给定类型和名称,这样编译器进行进一步的编辑,而不需要对变量的完整细节。变量声明有其意义在编译时止,编译器需要实际的变量声明在链接程序时。

示例

试试下面的例子,其中变量已经被声明为有型,并且已被定义及主要函数内部初始化:

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

动态类型声明/类型推断

动态类型变量声明要求编译器解释的基础上传递给它值变量的类型。编译器不需要一个变量静态有类型的必然要求。

示例

试试下面的例子,其中的变量已经声明没有任何类型的,并已确定在主函数中初始化。如果类型推断的,我们已经初始化的变量y使用:=运算符,x初始化使用=运算符。

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)
}

让我们编译和运行上面的程序,这将产生以下结果:

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

在Go中的左值和右值:

在Go中有两种表达式:

  1. lvalue : 引用一个存储器位置的表达式被称为“左值”表达。左值可能显示为任一左手或赋值的右侧。

  2. rvalue : 术语右值是指被存储在存储器中的某些地址的数据值。右值是不能分配给它的值,这意味着右值可能出现在赋值的右侧而不是左侧的表达式。

变量是左值等都可能出现在赋值的左侧。数字文字是右值,因此可能不会被分配,不能出现在左侧。下面是一个有效语句:

x = 20.0

但是,下面是不是一个有效的声明,并会产生编译时错误:

10 = 20