• Go 的 类型定义 和 类型别名 (Type Alias Declarations)


    type A = B // type alias			 仅仅是一个 alias (别名), 没有生成一个新的 type,因此不需要强转型
    type A B	 // type definition, 将会产生一个新的 type, 在进行类型变换时,需要强转型
    
    package main
    
    import "fmt"
    
    type A = int
    type B int
    
    func main() {
    	var a A
    	var b B
    	var i int
    
    	a = i
    	b = B(i)
    	fmt.Println(a, b)
    }
    

    使用 type alias 之后,不一定能为该 type alias 添加 method。

    例如在上面 A 是 int 的 alias,也就是说 A 实际上就是 int,int 是一个 built in type ,在 go 中没办法为 build in type 添加 alias。

    func (A) Hello() {
    	// Error : Cannot define new methods on the non-local type 'builtin.int'
    }
    
    func (B) Hello() {
    	// It's OK
    }
    

    type alias 和它的本体的 method 定义是共享的

    package main
    
    import "fmt"
    
    type B int
    type AliasB = B
    
    func (B) Hello() {
    	fmt.Println("hello")
    }
    
    // func (AliasB) Hello() {
    // 	// Error: Method redeclared 'AliasB.Hello'
    // }
    
    func (AliasB) World() {
    	fmt.Println("world")
    }
    
    func main() {
    	var b B
    	var aliasB AliasB
    	b.Hello()	// ok
    	b.World()	// ok
    	aliasB.Hello()	// ok
    	aliasB.World()	// ok
    }
    

    method 的 receiver 的 type 不能是 pointer, 因此下面两种做法都是编译不过的

    type B int
    type AliasB = B
    type AliasPointerB = *B
    type PointerB *B
    
    func (PointerB) Hello() {
    	// Error: Invalid receiver type 'PointerB' ('PointerB' is a pointer type)
    }
    
    func (AliasPointerB) PHello() {
    	// Error: Invalid receiver type 'AliasPointerB' ('AliasPointerB' is a pointer type)
    }
    

    btw, byteuint8 的 alias , runeint32 的 alias

    reference: https://go101.org/article/type-system-overview.html

  • 相关阅读:
    python django 路由系统
    django的as_view方法实现分析
    基类View
    Django templates(模板)
    Django ORM那些相关操作
    $.ajax()方法详解
    Http协议中的get和post
    Django组件-cookie,session
    Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
    Django基础(4) ----django多表添加,基于对象的跨表查询
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/15154878.html
Copyright © 2020-2023  润新知