• Go语言数据类型实例讲解 - Go语言从入门到实战


    Go语言数据类型实例讲解 - Go语言从入门到实战

    基础数据类型

    bool
    string	
    int int8 int16 int32 int64
    uint uint8 uint16 uint32 uint64 uintptr
    byte
    rune
    float32 float64
    complex64 complex128
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    类型描述
    bool布尔型(bool):可以是true或false。
    string字符串类型:表示文本数据。
    int整型:根据平台不同,可以是32位或64位。
    int88位整型:取值范围为-128到127。
    int1616位整型:取值范围为-32768到32767。
    int3232位整型:取值范围为-2147483648到2147483647。
    int6464位整型:取值范围为-9223372036854775808到9223372036854775807。
    uint无符号整型:根据平台不同,可以是32位或64位。
    uint88位无符号整型:取值范围为0到255。
    uint1616位无符号整型:取值范围为0到65535。
    uint3232位无符号整型:取值范围为0到4294967295。
    uint6464位无符号整型:取值范围为0到18446744073709551615。
    uintptr用于保存指针的无符号整型。
    byteuint8的别名。
    runeint32的别名,代表一个Unicode编码点。
    float3232位浮点数类型。
    float6464位浮点数类型。
    complex6464位复数类型,由两个32位浮点数表示实部和虚部。
    complex128128位复数类型,由两个64位浮点数表示实部和虚部。

    类型转换

    与其他主要编程语言的差异

    1. Go语言不允许隐式类型转换
    2. 别名和原有类型也不能进行隐式类型转换
    package main  
      
    import "testing"  
      
    func TestType(t *testing.T) {  
        var a int = 1  
        var b int64 = 2  
      
        // 这行代码会编译错误,因为无法完成从int到int64的隐式转换, 不允许将一个int类型的变量a赋值给int64类型的变量b。必须显式地将a转换为int64类型,才能赋值给b。
        // b = a  
      
        // 必须显式转换类型  
        b = int64(a)  
      
        t.Log(a, b)  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    类型的预定义值

    1. math.MaxInt64:这是int64类型的最大值,即9223372036854775807。
    2. math.MaxFloat64:这是float64类型的最大值,即1.8e308。
    3. math.MaxUint32:这是uint32类型的最大值,即4294967295。

    这些值是在math包中定义的,它们可以用于比较和限制数值的范围,以防止溢出或下溢。

    指针类型

    Go语言指针主要包含两个重要概念:指针和切片

    1. 指针:
      • 指针是Go语言中的一种特殊数据类型,它存储了一个变量的内存地址。通过使用指针,可以直接访问指向的内存地址上的值。
      • 传递指针可以避免数据拷贝,提高性能。当传递大型数据结构时,使用指针可以避免将数据整体复制到函数栈上,而是直接操作原始数据。
      • 可以使用指针来修改所指向的值。通过指针访问并修改内存地址上的值,会影响到原始变量的值。
      • 类型指针是指向特定类型变量的指针。类型指针不能进行算术运算或偏移操作,只能与nil进行比较。
    2. 切片:
      • 切片是对数组的一个引用,它包含了指向数组起始元素的指针、切片长度和切片容量。切片长度是切片中元素的数量,切片容量是从起始元素到底层数组的最后一个元素的数量。
      • 切片比使用原始指针更安全,因为它具有内置的长度和容量检查。当尝试访问超出切片长度的索引时,Go语言会抛出运行时错误(panic),并显示堆栈信息,有助于调试。而使用原始指针时,越界访问可能导致程序崩溃,导致不会提供详细的错误信息。
      • 切片是动态长度的,可以根据需要增长或缩小。这使得切片非常适合用于处理可变长度的数据序列。

    与其他主要编程语言的差异

    1. 不支持指针运算,不能通过增加或减少指针的值来访问内存中的其他位置。
    2. string是值类型,其默认的初始化值为空字符串,而不是nil。在Go语言中,字符串是一种值类型,当创建一个字符串变量时,它会在内存中有一个具体的值。
    package type_test
    
    import "testing"
    
    type MyInt int64
    
    func TestPoint(t *testing.T) {
    	a := 1
    	aPtr := &a	//创建了一个指向a的指针aPtr
    	//aPtr = aPtr + 1
    	t.Log(a, aPtr)
    	t.Logf("%T %T", a, aPtr)	//打印它们的类型
    }
    
    func TestString(t *testing.T) {
    	var s string
    	t.Log("*" + s + "*") //初始化零值是“”
    	t.Log(len(s))	//s的值为默认的空字符串。打印s的长度,应为0。
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。

    欢迎关注云尔Websites CSDN博客

    欢迎进入Golang交流社区

  • 相关阅读:
    java计算机毕业设计ssm社会救援力量信息管理统计系统6q3cn(附源码、数据库)
    人工智能知识全面讲解:特征工程
    279. 完全平方数
    测试内推 | 阿里飞猪、百度、58(招聘)、知乎、欢忻网络、百果园、阿里(Lazada)、深智城、元戎启行招人啦
    Mybatis快速上手
    vue-cli 简单了解及使用
    Effective C++ 阅读笔记 01:让自己习惯C++
    如何在CubeIDE环境下查看或生成汇编文件
    小目标检测
    从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 编写服务器
  • 原文地址:https://blog.csdn.net/wuchengzeng/article/details/133283108