• 技术文章 >后端开发 >Golang

    go语言有什么数据类型

    青灯夜游青灯夜游2021-06-07 14:35:29原创66

    go语言的数据类型有:1、布尔型;2、数值类型(可分为整型和浮点型);3、字符串类型;4、指针类型;5、数组类型;6、结构化类型;7、Channel类型;8、函数类型;9、切片类型;10、接口类型;11、Map类型。

    本教程操作环境:windows10系统、GO 1.11.2、Dell G3电脑。

    Go 语言是一种静态类型的编程语言,在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。编译器在进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么。

    基本数据类型说明

    类型描述
    uint32位或64位
    uint8无符号 8 位整型 (0 到 255)
    uint16无符号 16 位整型 (0 到 65535)
    uint32无符号 32 位整型 (0 到 4294967295)
    uint64无符号 64 位整型 (0 到 18446744073709551615)
    int32位或64位
    int8有符号 8 位整型 (-128 到 127)
    int16有符号 16 位整型 (-32768 到 32767)
    int32有符号 32 位整型 (-2147483648 到 2147483647)
    int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
    byteuint8的别名(type byte = uint8)
    runeint32的别名(type rune = int32),表示一个unicode码
    uintptr无符号整型,用于存放一个指针是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。
    uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
    float32IEEE-754 32位浮点型数
    float64IEEE-754 64位浮点型数
    complex6432 位实数和虚数
    complex12864 位实数和虚数

    整型

    整型数据分为两类,有符号无符号两种类型

    有符号: int, int8, int16, int32, int64

    无符号: uint, uint8, uint16, uint32, uint64, byte
    不同位数的整型区别在于能保存整型数字范围的大小;

    有符号类型可以存储任何整数,无符号类型只能存储自然数

    int和uint的大小和系统有关,32位系统表示int32和uint32,如果是64位系统则表示int64和uint64

    byte与uint8类似,一般用来存储单个字符

    在保证程序正确运行下,尽量使用占用空间小的数据类型

    fmt.Printf("%T", var_name)输出变量类型

    unsafe.Sizeof(var_name)查看变量占用字节

    浮点型

    浮点型也就是小数类型,可以存放小数。比如6.6,-12.34

    1、关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位

    2、尾数部分可能丢失,造成精度损失。-123.0000901

    package main
    
    import "fmt"
    
    func main() {
        
        var num1 float32 = -123.0000901
        var num2 float64 = -123.0000901
        fmt.Println("num1 = ", num1, "num2 = ", num2);
    }

    说明:float64的精度要比float32的要准确

    说明:如果我们要保存一个精度高的数,则应该选择float64

    3、浮点型的存储分为三部分:符号位+指数位+尾数位,在存储过程中,精度会有丢失

    4、golang的浮点型默认为float64类型

    5、通常情况下,应该使用float64,因为它比float32更精确

    6、0.123可以简写成.123,也支持科学计数法表示:5.1234e2 等价于512.34

    字符

    Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。

    字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,也就是说对于传统的字符串是由字符组成的,而Go的字符串不同,它是由字节组成的

    package main
    
    import "fmt"
    
    func main() {
        
        //字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
        var c1 byte = 'a'
        var c2 byte = '0'
    
        //当我们直接输出type值时,就是输出了对应字符的ASCII码值
        //'a' ==> 97
        fmt.Println(c1, "--", c2)
        //如果我们希望输出对应字符,需要使用格式化输出
        fmt.Printf("c2 = %c c2 = %c", c1, c2)
    }

    但是如果我们保存的字符大于255,比如存储汉字,这时byte类型就无法保存,此时可以使用uint或int类型保存

    字符类型本质探讨

    布尔型

    布尔类型也叫做bool类型,bool类型数据只允许取值true或false

    bool类型占1个字节

    bool类型适用于逻辑运算,一般用于流程控制

    字符串

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

    1、字符串一旦赋值了,就不能修改了:在Go中字符串是不可变的。

    2、字符串的两种标识形式

    3、字符串拼接方式"+"

    var str string = "hello " + "world"
    str += "!"

    4、当一行字符串太长时,需要使用到多行字符串,可以使用如下处理

    //正确写法
    str := "hello" + 
    	" world!"
    fmt.Println(str)
    
    //错误写法
    str := "hello "
    	+ "world!"
    fmt.Println(str)

    指针

    指针细节说明:

    值类型与引用类型

    值类型和引用类型使用特点:

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

    引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在上分配,当没有任何变量应用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。

    Golang中值类型和引用类型的区分

    基本数据类型默认值

    在Golang中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在Golang中,默认值也叫做零值。

    基本数据类型默认值如下:

    数据类型默认值
    整型0
    浮点型0
    字符串""
    布尔类型false
    package main
    
    import "fmt"
    
    func main() {
        
        var a int
        var b float32
        var isTrue bool
        var str string
    
        //这里的%v,表示按照变量的值输出
        fmt.Printf("a = %v, b = %v, isTrue = %v, str = %v", a, b, isTrue, str)
        fmt.Println("")
    }

    推荐学习:Golang教程

    以上就是go语言有什么数据类型的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:go语言 数据类型
    上一篇:go语言是什么开源协议 下一篇:go语言如何从切片中删除元素
    第16期线上培训班

    相关文章推荐

    • go语言中字符串怎么逐个取出• go语言怎么将字符串转换成浮点数• go语言中while是关键字吗• go语言中有字符类型吗• go语言中map可以定义长度吗

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网