go - 自定义类型和原始类型之间的区别
问题描述
我对 Go 类型有一个快速的疑问。
type mystr string
var s1 mystr = "abc"
var s2 string = "abc"
这里 s1 总是采用类似于 s2 的字符串类型。我的问题是,为什么在 Go 中允许定义这样的类型(它们是原始类型)。当我什至无法将 s1 与 s2 进行比较时
if s1 == s2 // compilation error
这种场景的用例是什么?
解决方案
它类似于其他编程语言中的扩展方法。您可以将自己的行为添加到您的类型(并且不能在标准类型中):
type MyStr string
func (s MyStr) Length() int {
return len(string(s))
}
func main() {
s := MyStr("hello")
fmt.Println(s.Length())
}
推荐阅读
- ruby-on-rails - Ruby rails 生成迁移通用以在 Ruby on Rails 中的多个列上添加索引
- r - 根据 R 中行和下一行中的值填充基于另一列的列
- ffmpeg - 为什么 libyuv: i420ToARGb 运行如此缓慢
- c# - .NET 针对 VS2017 中的多个框架。如何让 IDE 以特定的预处理器指令为目标?
- vim - 为什么 vim 复制/粘贴这么慢?
- c - SystemTap 中的嵌入式 C - 取消引用指向不完整类型的指针
- javascript - 访问变量时电子错误
- javascript - 如何在 Matter-js 中找到具有特定矢量方向的身体和另一个身体之间的距离?
- google-cloud-speech - 转录未识别语言的语音的方法?
- java - 使用 Jena API 编写 Tbox 模型