• Go | 基本数据类型详解


    前言

    基本数据类型,变量存的就是值,也叫值类型。每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。

    Printf 和 Println 的区别

    • printf 输出后不换行, println输出后自动换行;

    • printf 格式化输出,println 直接输出内容

    • Printf 根据format参数生成格式化的字符串并写入标准输出。

    判断数据类型以及查看变量使用内存空间

    package main
    
    // import "unsafe"
    // import "fmt"
    // 引入多个
    import (
    "fmt"
    "unsafe"
    )
    
    func main() {
    	var i int8 = 12
    	fmt.Println("i= ", i)
    
    	var i2 uint8 = 129
    	fmt.Println("i2= ", i2)
    
    	var n = 12
    	fmt.Printf("n的类型是%T\n", n) // n的类型是int
    
    	var name = "xiao"
    	fmt.Printf("name的类型是%T\n", name) // name的类型是string
    
    	// 查看变量占用的字节大小和数据类型
    	fmt.Printf("name的类型是%T", name, unsafe.Sizeof(name))
    }
    

    基本数据类型

    数值型

    整数类型 (默认值是0)

    int, int8, int16, int32, int64
    uint, uint8, uint16, uint32, uint64 无符号数(表示的范围更大)
    byte

    • bit: 计算机中的最小存储单位

    • byte: 计算机中基本存储单元

    • 1byte = 8bit (一个字节8位)

    var i int8 = -129
    
    // constant -129 overflows int8
    
    var i2 uint8 = -129
    // constant -129 overflows uint8
    

    浮点类型 (默认值是0)

    • float32

    • float64(默认类型)

    浮点数 = 符号位 + 指数位 + 尾数位

    浮点数都是有符号

    使用浮点类型的时候就需要注意存在丢失精度的问题

    var num1 float32 = 12.556883123132   // 精度会丢失
    var num2 float64 = 12.556883123132   // 64位比32位精度要准确
    fmt.Println("num1=", num1, "num2", num2) // num1= 12.556883 num2 12.556883123132
    
    var num = 12.64
    fmt.Printf("num的类型", num) // num的类型%!(EXTRA float64=12.64)
    
    var num3 = 5.6e2   //  5.6 * 10^2 = 5.6 * 100 = 560
    fmt.Println("num3=", num3)
    

    字符型

    没有专门的字符型,使用byte来保存单个字母字符

    ASCII码(128个)

    • Go语言的字符使用UTF-8编码

    • 英文字母:1个字节

    • 汉字:3个字节

    • 字符必须使用单引号括起来,双引号会报错

    单引号针对单个字符,字符串要使用双引号

    UTF-8是对ASCII的扩容

    var str1 byte = 'a'
    var str2 byte = '0'
    
    // 当直接输出byte时,输出的使对应字符的ASCII码值(十进制)
    fmt.Println("str1", str1, "str2", str2) // str1 97 str2 48
    fmt.Printf("str1=%c str2=%c", str1, str2) // str1=a str2=0
    
    fmt.Printf("str1=%c", str1) // str1=a
    fmt.Printf("str2=%c", str2) // str2=0
    
    
    var name byte = '吖'
    fmt.Printf("name=%c", name) // overflows byte 超出byte类型的存储范围了
    
    // 汉字更换成int类型
    var name int = '吖'
    fmt.Printf("name=%c", name) // name=吖
    
    var name1 int =22269
    fmt.Printf("name1=%c", name1) // name1=国
    
    // 数据类型只是为了定义存储空间的大小,对应计算机中的内存空间
    

    布尔型(bool)(默认值是false)

    用于逻辑运算,流程控制。bool类型只占用一个字节的内存空间

    var a = false
    fmt.Println(a)  // false
    fmt.Println(unsafe.Sizeof(a))  // 1
    

    字符串(string)(默认值是"")

    UTF-8编码

    字符串一经定义,则不能修改

    var address string = "北京长城"
    fmt.Println(address) // 北京长城
    
    var str = "hello"
    str[0] = 'a'     // cannot assign to str[0] (strings are immutable)
    fmt.Println(str)
    
    // 反引号
    // 以字符串原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果。
    
    // 字符串拼接, + 号要放在上面,否则会报错(因为go默认在一行后面加;号)
    var str01 = "hello" + " world"
    str01 += "  haha!" + "xixi" +
    "heihei"
    fmt.Println(str01)    // hello world  haha!xixiheihei
    

    基本数据类型的默认值

    var a int
    var b float32
    var c float64
    var d bool
    var e string
    
    // %v表示按照变量的值输出
    fmt.Printf("a=%d,b=%v,c=%v,d=%v e=%v", a,b,c,d,e)
    

    上面输出: a=0,b=0,c=0,d=false e=

    派生/复杂数据类型

    1. 指针(Pointer)

    2. 数组

    3. 结构体(struct)

    4. 管道(Channel)

    5. 函数

    6. 切片(slice)

    7. 接口(interface)

    8. map

    后面陆续讲解复杂数据类型。


    我是 甜点cc

    热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

    希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

  • 相关阅读:
    Lys-赖氨酸离子液体|Met-蛋氨酸离子液体|Phe-苯丙氨酸离子液体
    《剑指Offer》刷题之打印从1到最大的n位数
    Python报错“ImportError:most likely due to a circular import“记录
    NC9 二叉树中和为某一值的路径(一)
    【设计模式】组合模式
    功率放大器的设计要点
    中国网络安全审查认证和市场监管大数据中心数据合规官CCRC-DCO
    notion, followus, wolai, wiz, lark
    Go :验证编译器是否强制执行了复制参数要求(附完整源码)
    【浅拷贝和深拷贝】,【堆和栈】,【基本类型和引用类型】
  • 原文地址:https://www.cnblogs.com/all-smile/p/16816365.html