一、 整型

类型

有无符号

长度

取值范围

int8


1个字节(8bit)

-128 ~127

int16


2个字节(16bit)

-32768 ~ 32767

int32 


4个字节(32bit)

-2147483648 ~ 2147483647

int64


8个字节(64bit)

-9223372036854775808 ~ 9223372036854775807

int


 

32位操作系统上就是int32,64位操作系统上就是int64

 

uint8


1个字节(8bit)

0 ~ 255

uint16


2个字节(16bit)

0 ~ 65535

uint32


4个字节(32bit)

0 ~ 4294967295

uint64


8个字节(64bit)

0 ~ 18446744073709551615

uint


 

32位操作系统上就是int32,64位操作系统上就是int64

GO在默认情况下使用的是有符号int型

go语言基本类型 go语言值类型_go语言基本类型

建议:在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和 uint。

二、布尔类型

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true和false两个值。

  • 布尔类型变量的默认值为false。
  • Go 语言中不允许将整型强制转换为布尔型.
  • 布尔型无法参与数值运算,也无法与其他类型进行转换。

类型

长度

取值范围

bool

1个字节(8bit)

true 或者 false

go语言基本类型 go语言值类型_数据类型_02

三、浮点型

  Go语言支持两种浮点型数:float32和float64;数位越高浮点数的精度越高
  float32: 占4字节32bit

  •   math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38
  •   最小值为:1.4e-45

  float64:占8字节64bitfloat64占用的内存是float32的两倍

  •   math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308;
  •   最小值为:4.9e-324

Go 语言默认情况下使用的是 float64

go语言基本类型 go语言值类型_unicode_03

四、byte和rune 

1、byte 实际就是 uint8。
2、rune 实际就是 int32。

go语言基本类型 go语言值类型_unicode_04

Go 语言的字符有以下两种:

  • uint8类型,或者叫 byte 型,代表了ASCII码的一个字符,处理英文很方便
  • rune类型,代表一个 UTF-8字符 ,处理Unicode 字符集很方便,Go采用的是UTF-8编码格式
package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	s := "hello中国"
	fmt.Printf("s 数据类型=%T ,ASCII 字符个数=%v , Uncode 字符数量=%v ", s, len(s), utf8.RuneCountInString(s))
	fmt.Println()
	for i := 0; i < len(s); i++ { //byte
		fmt.Printf("%v(%c) ", s[i], s[i])
	}
	fmt.Println()
	for _, r := range s { //rune
		fmt.Printf("%v(%c) ", r, r)
	}
	fmt.Println()
}

go语言基本类型 go语言值类型_go语言_05

因为UTF8编码下一个中文汉字由3个字节组成,所以不能按照字节去遍历一个包含中文的字符串,否则就会出现上面输出乱码

五、字符串

Go语言里的字符串的内部采用的是Unicode字符集的UTF-8编码,字符串的值为双引号""中的内容;

go语言基本类型 go语言值类型_数据类型_06


Go中字符串是一个字节切片,所以我们可以获取字符串的每一个字节。

go语言基本类型 go语言值类型_unicode_07

go语言基本类型 go语言值类型_go_08

string 常用的方法

  • utf8 package("unicode/utf8") 包中的 func RuneCountInString(s string) (n int) 方法用来获取字符串中字符的长度                                    
  • len(str)                                  求字节长度
  • +或fmt.Sprintf                            拼接字符串
  • strings.Split                            分割
  • strings.contains                         判断是否包含
  • strings.HasPrefix,strings.HasSuffix      前缀/后缀判断
  • strings.Index(),strings.LastIndex()      子串出现的位置
  • strings.Join(a[]string, sep string)       join操作

六、复数类型

complex64: 实部和虚部都是 float32 类型的的复数。
complex128:实部和虚部都是 float64 类型的的复数。

go语言基本类型 go语言值类型_数据类型_09

七、类型转换

Go不像JAVA,C++有自动类型提升和自动类型转换,他有着非常严格的强类型特征, 没有自动类型转换和自动类型提升

go语言基本类型 go语言值类型_unicode_10

num1 和 num2 应该是相同的类型,需要我们显示的做类型转换;语法: 把 v 转换为 T 类型    T(v)

go语言基本类型 go语言值类型_数据类型_11