美文网首页Go Lang 实战
Go自定义类型(一)

Go自定义类型(一)

作者: 草莓君_ | 来源:发表于2019-07-30 19:55 被阅读0次

使用关键字type定义用户自定义类型,包括基于现有基础类型创建,或者是结构体、函数类型等。

type student byte
func main() {
    var name student = 1
    println(name)
}

输出:

1

1.和var、const类似,多个type定义可合并成组,可在函数或代码块内定义局部类型。

func main() {
    type (               //组
        user struct{     //结构体
            name string
            age uint8
        }
        event func(string) bool  //函数类型
    )
    u := user{"Tom",20}
    fmt.Println(u)
    
    var f event = func(s string) bool {
        println(s)
        return s != ""
    }
    f("abc")
}

输出:

{Tom 20}
abc

2.即便制定了基础类型,也只表明它们有相同的底层数据结构,两者间不存在任何关系,属于完全不同的两种类型。除操作符外,自定义类型不会继承基础类型的其他信息(包括方法)。不能视作别名,不能隐式转换,不能直接用于比较表达式。

    type data int
    var d data = 10
    var x int = d   //编译错误 cannot use d (type data) as type int in assignment
    println(x)
    println(d == x) //编译错误 invalid operation: d == x (mismatched types data and int)

3.未命名类型
与有明确标识符的bool、int、string等类型相比,数组、切片、字典、通道等类型与具体元素类型或长度等属性有关,故称作未命名类型(unnamed type)。当然,可用type为其提供具体名称,将其改变为命名类型(named type)。
具有相同声明的未命名类型被视作同一类型。

  • 具有相同基类型的指针
  • 具有相同元素类型和长度的数组(array)
  • 具有相同元素类型的切片(slice)
  • 具有相同键值类型的字典(map)
  • 具有相同数据类型及操作方向的通道(channel)
  • 具有相同字段序列(参数、字段类型、标签、以及字段顺序)的结构体(struce)
  • 具有相同签名(参数和返回值列表,不包括参数名)的函数(func)
  • 具有相同方法集(方法名、方法签名,不包括顺序)的接口(interface)

4.未命名类型转换规则:

  • 所属类型相同
  • 基础类型相同,且其中一个是未命名类型
  • 数据类型相同,将双向通道赋值给单向通道,且其中一个为未命名类型
  • 将默认值nil赋值给切片、字典、通道、指针、函数或接口
  • 对象实现了目标接口
func main() {
    type data [2]int
    var d data = [2]int{1, 2} //基础类型相同,右值为未命名类型
    fmt.Println(d)

    a := make(chan int, 2)

    var b chan<- int = a  //双向通道转换为单向通道,其中b为未命名类型
    b <- 2
}

相关文章

  • Go-Struct

    自定义类型 类型别名 go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构...

  • Go 语言程序设计——面向对象编程(5)

    结构体 Go 语言中创建自定义结构体最简单的方式是基于 Go 语言的内置类型创建 自定义类型也可以基于结构体创建,...

  • Go语言基础之Struct

    Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自定义的类型,可以像内置类型一样使用str...

  • go中的type关键字

    go中的type关键字用来标识类型。“类型”可以是普通类型、复合类型,也可以自定义。 普通类型boolean, i...

  • Go语言的主要特征

    Go语言的主要特征: Golang文件名: Go语言命名: 1.Go的函数、变量、常量、自定义类型、包(packa...

  • Go Struct

    Go语言通过自定义结构的方式来实现新的类型,结构体是类型中带有成员的复合类型。 Go语言使用结构体和结构体成员来描...

  • Go自定义类型(一)

    使用关键字type定义用户自定义类型,包括基于现有基础类型创建,或者是结构体、函数类型等。 输出: 1.和var、...

  • Golang Struct 声明和使用

    Golang Struct 声明和使用 Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自...

  • Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。试图表示一个现实世界...

  • 《Go语言四十二章经》第十七章 Type关键字

    作者:李骁 Type关键字在Go语言中作用很重要,比如定义结构体,接口,还可以自定义类型,定义类型别名等。自定义类...

网友评论

    本文标题:Go自定义类型(一)

    本文链接:https://www.haomeiwen.com/subject/eqrorctx.html