• go 类型


    常见类型

      学习到了go的类型,我第一印象是go的类型怎么这么多?光整数就有13种。所以尽量就分类总结下:

    大类小类
    intint int8 int16 int32 rune int64
    unituint uintptr uint8 byte uint16 uint32 uint64
    floatfloat32 float64
    complexcomplex64 complex128
    boolbool
    stringstring
    errorerror

      常见类型就是7种,其中int和uint以及uintptr是机器相关的,不同位数的机器长度不一样。byte就是unit8, rune就是int32。

    类型定义

      C语言有#typedef预编译指令用于给类型取别名,go也保留了这个语法。我迫不及待要试一试了,话说目前这些语言中,我最爱go。在编程语言这方面,我比较喜新厌旧,说不定未来我又喜欢上一门新的语言了。好了,闲话不说了,试试类型别名,不过Go的规范是类型名首字母要大写:

    package main
    
    import "fmt"
    
    type Natural rune
    
    func main() {
    	var x Natural = 19
    	fmt.Println(x * x * x)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

      运行一下:

    PS F:\learn\go\demo3> go build .\natural.go
    PS F:\learn\go\demo3> .\natural.exe
    6859
    
    • 1
    • 2
    • 3

      但是这个类型声明有个陷阱,其实本质上不是别名,而是不同类型了。我举个例子:

    package main
    
    import "fmt"
    
    type Natural rune
    type Integer rune
    
    func main() {
    	var x Natural = 19
    	var y Integer = 19
    	fmt.Println(x == y)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

      这段代码是会编译报错的,报错信息如下:

    .\types.go:11:19: invalid operation: x == y (mismatched types Natural and Integer)
    
    • 1

      这两个东西,不再是rune了。不过也不要灰心,转一下类型就可以了,如下:

    package main
    
    import "fmt"
    
    type Natural rune
    type Integer rune
    
    func main() {
    	var x Natural = 19
    	var y Integer = 19
    	fmt.Println(x == Natural(y))
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    结构体

      除了上述的方式外,还可以定义结构体。回想C语言,除了结构体还有共用体之类的。C语言的共用体,说实话,我学过,但是从来没用过,所以go语言没有共同体,我觉得是合理的,不实用的语法是应该剔除。对于知识,我都是迫不及待尝鲜,马上写代码:

    package main
    
    import "fmt"
    
    type Book struct {
    	name  string
    	isbn  string
    	price float32
    }
    
    func main() {
    	var book Book
    	book.price = 91.1
    	book.name = "王者荣耀上分秘籍"
    	book.isbn = "123456"
    	fmt.Println(book)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

      结果是自动格式化输出啊,这点不比java和python舒服?

    {王者荣耀上分秘籍 123456 91.1}
    
    • 1
  • 相关阅读:
    记录成功通过CSP接口获取Ukey的X509数字证书过程
    碎片笔记|AIGC核心技术综述
    [ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(下)
    【GESP考级C++】1级样题 闰年统计
    【解刊】IEEE旗下,中科院1区TOP,影响因子将突破40!
    Appium自动化测试基础 — APPium基本原理
    重金属行业经销商渠道管理系统:完善客户管理体系,规范渠道销售管理
    再次认识常量与局部量
    Day36 移动端自动化
    【Redis高手修炼之路】初识Redis
  • 原文地址:https://blog.csdn.net/m0_66201040/article/details/126013024