建设工程消防备案凭证网站,wordpress伪静态,网站管理系统哪个最好,电脑外设网站建设论文type关键字再定义类型和类型别名有很大的区别#xff0c;前者是新定义一个数据类型#xff0c;后者是对类型的重命名。
type NewString stringtype OldString stringtype NewString string声明了一个NewString类型#xff0c;和string具有完全一致的数据结构#xff0c;确…type关键字再定义类型和类型别名有很大的区别前者是新定义一个数据类型后者是对类型的重命名。
type NewString stringtype OldString stringtype NewString string声明了一个NewString类型和string具有完全一致的数据结构确实两种类型。这样有什么好处是使新的类型可以扩充和延展。
在Go语言中方法只能在同一包下定义不能为其他包的类型定义方法如下 需要通过类型定义来在新的包中对类型进行扩展。例如如果需要对所有的string类型做更改比如加一个666后缀。如果不用新类型就需要在每个string类型后面666的操作还有一种方法是在string包下添加一个方法如下 不能定义其他包中类型的方法这使切换到string包下看以看到官方都是用到这种定义方式 在该类下添加上述add666方法显然使不合适的因为该包下全是类型定义再添加方法显得很冗余另外这个方法只是一次性需求不是通用性方法也不能添加再该包下。
type关键字的类型定义就可以完美解决该问题首先类型定义和原类型完全一致其次在任意包下新定义类型就可以为其扩展方法。于是之前无法完成的任务就可以使用下面方法完成
package maintype NewString stringfunc main() {var a NewStringprintln(a.add666(xiaoxu))
}func (self NewString) add666(str string) string {return str 666
}NewString 和string是完全一样的类型。
通过类型定义将类型和类型的方法可以分开特定类型的方法分隔开来不用将非通用性的方法全写在一个包下。
type OldString string为类型起一个别名其主要作用有简化书写赋予实际意义。例如在go语言中任意类型为空接口但是空接口inteface{}写起来比较复杂使用any代替简化书写。 在内置的类型中使用byte作为unit8的别名赋予新的意义。