简单数据类型

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

Go 语言基本数据类型有:布尔型、数字类型、字符串类型

布尔型

布尔型的值只可以是常量 true 或者 false

一个简单的例子:var b bool = true

名称类型和描述默认值存储空间(bit)值范围
boolbooleanfalse1true 或 false

数字类型

整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

名称类型和描述默认值存储空间(bit)值范围
int平台相关(int32/64)0平台相关平台相关
uint平台相关(uint32/64)0平台相关平台相关
int88位有符号整型08-128 ~ 127
uint88位无符号整型080 ~ 255
int1616位有符号整型016-32768 ~ 32767
uint1616位无符号整型0160 ~ 65535
int3232位有符号整型032-2147483648 ~ 2147483647
uint3232位无符号整型0320 ~ 4294967295
int6464位有符号整型064-9223372036854775808 ~ 9223372036854775807
uint6464位无符号整型0640 ~ 18446744073709551615
float3232位浮点类型0.032IEEE-754
float6464位浮点类型0.064IEEE-754
complex64由float32实部+虚部0+0i64对应 float32
complex128由float64实部+虚部0+0i128对应 float64
byteuint8的别名08UTF-8 单个字节的值
runeint32的别名032单个 Unicode 字符
uintptr用于一个存放指针0平台相关平台相关
  • 整数
  • 十进制整数,使用 0-9 的数字表示且不以 0 开头。
  • 八进制整数,以 0 开头,0-7 的数字表示
  • 十六进制整数,以 0X 或者是 0x 开头,0-9|A-F|a-f 组成

  • 浮点数由整数部分、小数点和小数部分组成,整数部分和小数部分可以隐藏其中一种。也可以使用科学计数法表示:

    0.
    72.40
    072.40 和 72.40 一样
    2.71823
    1.e+0
    6.67428e-11
    1E6
    .25
    .12345E+5
    
  • 复数的虚部,由一个整数或者是一个小数加上i表示

    0i
    011i //==11i 这里部分八进制了
    0.i
    2.71825i
    1.e+0i
    6.23423-11i
    1E6i
    .25i
    .1234E+5i
    
  • byte 对应 ASCII 码的字符值

  • rune 表示 Unicode 的字符

字符串类型:

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。

  • Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。

  • Go 语言支持以下 2 种形式的字符串:

str := "laoYu"                // 解释性字符串,该类字符串使用双引号括起来,其中的相关的转义字符将被替换
`This is a raw string \n`    // 原生字符串该类字符串使用反引号括起来,支持换行
  • string 是不可改变的,一旦创建,string 的内容就不能被改变。
a := “test”
a[1] = ‘a’     // 不能改变 string 的值
&a[i]         // 不能对 string 的元素进行取地址
a[i]        // 访问的是第i个 byte len(i)是 byte 的个数,unicode可能占据多个 byte


for , ch := range a {
    // 可以遍历string的每一个unicode
}

for , uni := range []rune(a) {
    // 可以遍历string的每一个unicode
}

for _, ch := range []byte(a) {
    //可以遍历string的每一个 byte
}
  • 字符串底层设计
    type stringStruct struct {
      str unsafe.Pointer  // 指向一个 [len]byte 的数组
      len int             // 长度
    }
    
    点击查看 字符串底层设计

str 为字符数组,len 为数组长度。Go 的字符串是不可变类型,对 string 类型的变量初始化意味着会对底层结构的初始化。 至于为什么str用byte类型而不用rune类型,Go 的 for 循环对字符串的遍历是基于字节的,所以 str 用 byte 类型而不用 rune 类型。

当然,如果有必要,可以转成 rune 切片或使用 range 来迭代。

内建函数 len 对 string 类型的操作是直接从底层结构中取出 len 值,不需要额外的操作,当然在初始化时必需同时初始化 len 的值。

powered by Gitbook该文件修订时间: 2020-04-10 10:05:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""