Go 语言入门指南:数据类型及变量 | 青训营

85 阅读4分钟

Go 语言数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

Go 语言按类别有以下几种数据类型:

在 Go 编程语言中,数据类型用于声明函数和变量。

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

go语言的数据类型有:

1、布尔型,值只可以是常量true或false;

2、数字类型,支持整型和浮点型数字,并且支持复数;

3、字符串类型,是一串固定长度的字符连接起来的字符序列;

4、指针类型;

5、数组类型;

6、结构化类型;

7、Channel类型;

8、函数类型;

9、切片类型;

10、接口类型;

11、Map类型。

image.png

整型分为两个大类: 按分配空间长度分为:int8、int16、int32、int64, 对应的无符号整型:uint8、uint16、uint32、uint64

其中,uint8 就是我们熟知的 byte 型,int16 对应C语言中的short 型,int64 对应C语言中的 long 型。

image.png

浮点型

image.png Go语言支持两种浮点型数:float32 和 float64 。

这两种浮点型数据格式遵循IEEE 754标准:

float32 的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。 复数 Go原生支持复数:complex64 和 complex128

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

其他数字类型

以下列出了其他更多的数字类型:

image.png

int uint的大小与使用者的电脑操作系统位数有关。

Go 语言变量作用域

作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。

Go 语言中变量可以在三个地方声明:

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

接下来让我们具体了解局部变量、全局变量和形式参数。

局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

以下实例中 main() 函数使用了局部变量 a, b, c:

package main

import "fmt"

func main() {
   /* 声明局部变量 */
   var a, b, c int 

   /* 初始化参数 */
   a = 10
   b = 20
   c = a + b

   fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)
}

以上实例执行输出结果为:

结果: a = 10, b = 20 and c = 30

全局变量

在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。

全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:

package main  
  
import "fmt"  
  
/* 声明全局变量 */  
var g int  
var x = 1  
var y int = 3  
//不能写 y:=3 会报错  
func main() {  
  
/* 声明局部变量 */  
var a, b int  
  
/* 初始化参数 */  
a = 10  
b = 20  
g = a + b  
  
fmt.Printf("结果: a = %d, b = %d and g = %d,x = %d,y = %d\n", a, b, g, x, y)  
}

以上实例执行输出结果为:

结果: a = 10, b = 20 and g = 30,x = 1,y = 3

image.png Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:

package main

import "fmt"

/* 声明全局变量 */
var g int = 20

func main() {
   /* 声明局部变量 */
   var g int = 10

   fmt.Printf ("结果: g = %d\n",  g)
}

以上实例执行输出结果为:

结果: g = 10

形式参数

形式参数会作为函数的局部变量来使用。实例如下:

package main

import "fmt"

/* 声明全局变量 */
var a int = 20;

func main() {
   /* main 函数中声明局部变量 */
   var a int = 10
   var b int = 20
   var c int = 0

   fmt.Printf("main()函数中 a = %d\n",  a);
   c = sum( a, b);
   fmt.Printf("main()函数中 c = %d\n",  c);
}

/* 函数定义-两数相加 */
func sum(a, b int) int {
   fmt.Printf("sum() 函数中 a = %d\n",  a);
   fmt.Printf("sum() 函数中 b = %d\n",  b);

   return a + b;
}

以上实例执行输出结果为:

main()函数中 a = 10

sum() 函数中 a = 10

sum() 函数中 b = 20

main()函数中 c = 30

初始化局部和全局变量

不同类型的局部和全局变量默认值为:

数据类型初始化默认值
int0
float320
pointernil