Fork me on GitHub

Go语言之数据类型(一)

一、数据类型分类

二、基本数据类型

基本数据类型包含数值型、字符型、布尔型以及字符串,下面说明每种类型的用法。

(一)数值型

1、整数类型

整数类型就是用于存放整数值的。

  • 类型一览
类型 有无符号 占用存储空间 表数范围
int

32位系统4字节

64位系统8字节

-231~231-1
int8 1字节 -128~127
int16 2字节 -215~215-1
int32 4字节 -231~231-1
int64 8字节 -263~263-1
rune 与int32一样 -231~231-1
uint

32位系统4字节

64位系统8字节

0~232-1

0-264-1

uint8 1字节 0~255
uint16 2字节 0~216-1
uint32 4字节 0~232-1
uint64 8字节 0~264-1
byte 与uint8等价 0~255

可以看出有无符号的区别是数的表示范围不一样。

  • 使用
package main
import "fmt"

func main() {

    //有符号int8
    var i int8 = 127
    fmt.Println("i=",i)

    //无符号int8
    var j uint8 = 250
    fmt.Println("j=",j)

}

执行结果为:

PS D:\go_project\src\go_tutorial\day02\int_\01> go run .\main.go
i= 127
j= 250
  • 注意事项

(1)go语言中有符号与无符号表示数的范围不同,int与uint的范围与操作系统有关

(2)整型默认声明类型为int

package main
import (
    "fmt"
    "unsafe"
)

func main() {
    var a = 10

    // 查看默认类型
    fmt.Printf("a的类型为%T\n", a) //a的类型为int

    // 查看a变量占用的字节的大小
    fmt.Printf("a占用的字节大小%d", unsafe.Sizeof(a)) //a占用的字节大小8
}

2、浮点类型

 浮点数类型就是用来存放小数类型的。

  • 类型一览
类型 有无符号 占用存储空间 表数范围
float32

4字节

-3.403E38~3.403E38
float64 8字节 -1.798E308~1.798E308
  • 使用
package main 

import "fmt"

func main() {
    // 浮点数在Go中的使用
    var a float32 = -0.369
    var b float64 = -0625

    fmt.Println("a=", a, "b=", b) //a= -0.369 b= -405

    // 尾数可能造成精度的丢失
    var c float32 = -203.50000006
    var d float64 = -203.50000006
    fmt.Println("c=", c, "d=", d) //c= -203.5 d= -203.50000006

    // Go中默认浮点型存储类型为float64
    var e = 0.236
    fmt.Printf("e的类型为%T", e) // e的类型为float64
}
  • 注意事项

(1)浮点型存储由三部分构成 符号位+指数位+尾数位

(2)尾数位可能会造成精度的丢失,因此为了更加准确的存储精度高的数建议使用float64

(3)浮点数的默认类型位float64

(二)字符型

Go中没有专门的字符类型,如果存储单个字符类型,使用byte来实现。

1、使用

package main

import "fmt"

func main() {

    //1、使用byte来存储字符类型,值使用单引号('value')来表示,直接输出byte值就是输出对应的字符码值
    var a = '0'
    var b = 'h'
    fmt.Println("a=", a, "b=", b) //a= 48 b= 104

    //2、如果输出对应的字符,需要格式化输出
    fmt.Printf("a=%c b=%c\n", a, b) //a=0 b=h

    //3、byte类型的表数范围是0~255,如果存储的字符码值大于这个,可以使用int类型
    //var c byte = '张' //constant 24352 overflows byte
    var c int ='张'
    fmt.Println("c=", c) //c= 24352

    //4、如果给一个码值,按照格式化输出可以输出一个unicode字符
    var d int = 24352
    fmt.Printf("d=%c\n", d) //d=张

    //5、字符类型可以运算
    var e = 'm' + 10
    fmt.Println("e=", e) //e= 119

}

2、注意事项

  • 如果保存的字符在ASCII表中,如a-z,0-9等,可以直接保存在byte中
  • 如果保存的字符码值大于255,需要考虑使用int类型保存
  • 如果需要输出字符本身,需要使用格式化输出
  • 字符的本质是一个整数,所以直接输出byte会输出一个整数码值

3、字符本质探讨

  • 字符的存储与读取
存储:字符--》码值--》二进制--》存储
读取:二进制--》码值--》字符--》读取
  • 字符码值关系

字符与码值是通过字符编码表已经规定好的,是不能改变的。

(三)布尔类型

 布尔类型也叫bool类型,它只允许取值true或者false。bool类型占1字节空间大小,一般用于各种逻辑运算中。

package main

import (
    "fmt"
    "unsafe"
)

func main() {

    // 基本使用
    var a = false
    fmt.Println("a=", a) //a= false

    // 占用字节
    fmt.Println("a占用的字节大小为", unsafe.Sizeof(a)) //a占用的字节大小为 1

}

(四)字符串

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

1、使用

package main

import "fmt"

func main() {
    // 1、string基本使用
    var a = "hello world!"
    fmt.Println(a)

    // 2、Go中的字符串是不可变的
    // a[0] = 'k' // cannot assign to a[0] (strings are immutable)
    // fmt.Println(a)    

    // 3、字符串中转义字符使用
    b := "aaa\nbbb"
    fmt.Println(b)

    // 4、反引号``,以字符串原生形式输出
    c := `
      func main() {

      }
    `
    fmt.Println(c)
    
    // 5、字符串拼接
    d := "hello" + "world"
    fmt.Println(d)

    // 6、字符串多行处理
    // 字符串分行,保留 + 到上一行
    e := "hello" +
    "world"
    fmt.Println(e)
}

2、注意事项

  • Go语言中字符串的字节使用utf8编码
  • 字符串一旦定义声明赋值了,就不能修改了
  • 如果需要输出原生代码,可以使用反引号
  • 可以通过”+“进行字符串拼接,如果字符串太长换行,需要将”+“保留在上一行,因为Go中每一行代码结束后会自动加上 ; 结束符

 

posted @ 2021-08-19 11:15  iveBoy  阅读(121)  评论(0编辑  收藏  举报
TOP