跟我一起来学golang之《数据类型》|8月更文挑战

1,145 阅读4分钟

这是我参与 8 月更文挑战的第 1 天。一个热爱学习新技术的程序员,一个IT行业的规划师。@公众号 | IT技术小栈

Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有切片、结构体、函数、map、通道(channel)等。接下来我们针对各个数据类型我们进行介绍一下:

以下是go中可用的基本数据类型的代码展示形式:

以上代码展示形式没有体现复合数据类型如,切片,结构体,函数等。

整型

整型可以分成以下两个大类:

  • 按长度进行分类有:int8,int16,int32,int64。其中int32与我们JAVA中的int相似,int64与我们java中的long类型相似。具体长度如下:

int8 有符号 8 位整型 (-128127) 长度:8bit

int16 有符号 16 位整型 (-3276832767)

int32 有符号 32 位整型 (-21474836482147483647)

int64 有符号 64 位整型 (-92233720368547758089223372036854775807)

  • 无符号整形:uint8uint16uint32uint64。具体长度如下:

uint8 无符号 8 位整型 (0255) 8位都用于表示数值:

uint16 无符号 16 位整型 (065535)

uint32 无符号 32 位整型 (04294967295)

uint64 无符号 64 位整型 (018446744073709551615)

布尔型


布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true

浮点型

Go语言支持两种浮点型数:float32、float64 。 注意:没有float,默认声明为 float64

  • float32

IEEE-754 32位浮点型数

  • float64

IEEE-754 64位浮点型数

  • complex64

32 位实数和虚数

  • complex128

64 位实数和虚数

其它类型和对应长度:

  • byte

类似 uint8

  • rune

类似 int32

  • uint

32 或 64 位

  • int

与 uint 一样大小

  • uintptr

无符号整型,用于存放一个指针

字符串

字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。

字符串的两种表示形式:

  1. 双引号(" "),会识别转义字符

  2. 反引号,不会识别转义字符。以字符串的原生形式输出,包括换行和特殊字符。

image-20210802105556932

字符串代码示例:


var str string

str = "Hello World,我是 golang"

类型转换

go对于变量的类型有严格的限制,不同类型之间的变量不能进行赋值、表达式等操作,必须要要转换成同一类型才可以,比如int32和int64两种int类型的变量不能直接相加,要转换成一样才可以。

语法格式:Type(Value)

常数:在有需要的时候,会自动转型

变量:需要手动转型 T(V)

复合数据类型

以下说明的引用类型与值类型大家暂时先看着,具体含义我们会在讲具体数据结构的时候进行分析。由于复合数据类型比较复杂我们把每个复合数据类型进行单独讲解。

1、指针类型(Pointer)---引用类型

2、数组类型 ---值类型

3、结构体类型(struct) ---值类型

4、Channel 类型 ---引用类型

5、函数类型 ---引用类型

6、切片类型 ---引用类型

7、接口类型(interface) ---引用类型

8、Map 类型 ---引用类型

值类型:变量直接存储,内存通常在栈中分配。

引用类型:变量存储的是一个地址,通常在堆上分配。通过GC回收。

通常在函数中转入指针效率比较高,因为方法中的参数是需要进行拷贝的,拷贝指针的效率比较高,要是一个大的结构体的话拷贝的效率就比较低