what is difference in “type A = B“ and “type A B“(A and B both are struct name)

type MinerWallet struct{}

func (mw *MinerWallet) Update() {}

type MwAlias = MinerWallet

func (mw *MwAlias) Alias() {}

type MwOther MinerWallet

func (mw *MwOther) Other() {}

func init() {
	var mw, mwAlias, mwOther = new(MinerWallet), new(MwAlias), new(MwOther)
	mw.Alias()
	mw.Other()	// mw.Other undefined (type *MinerWallet has no field or method Other)
	mwAlias.Update()
	mwAlias.Other()	// mwAlias.Other undefined (type *MinerWallet has no field or method Other)
	mwOther.Update() // mwOther.Update undefined (type *MwOther has no field or method Update)
	mwOther.Alias() // mwOther.Alias undefined (type *MwOther has no field or method Alias)
	var mwEIfs, mwAliasEIfs, mwOtherEIfs interface{} = mw, mwAlias, mwOther
	var name = reflect.TypeOf(mwEIfs).Elem().Name()	// MinerWallet
	name = reflect.TypeOf(mwAliasEIfs).Elem().Name() // MinerWallet
	name = reflect.TypeOf(mwOtherEIfs).Elem().Name() // MwOther
	fmt.Println(name)
}

type A = B: A是B的别名, 方法互相公用同一个绑定的method set 对象,A和B定义同一个方法名称会产生冲突
type A B: A和B结构一样,但是绑定的method set 对象不同,A不继承B的method set,A和B定义同一个方法名称不会产生冲突

了解 Go 1.9 的类型别名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值