我对Go类型有一个快速的疑问。
type mystr string
var s1 mystr = "abc"
var s2 string = "abc"
此处s1始终采用类似于s2的字符串类型。我的问题是,为什么在Go中允许定义这样的 types (属于原始类型)。当我什至无法比较s1和s2
if s1 == s2 // compilation error
这种情况下的用例是什么?
答案 0 :(得分:3)
它类似于其他编程语言中的扩展方法。您可以将自己的行为添加到您的类型(不能在标准类型中):
type MyStr string
func (s MyStr) Length() int {
return len(string(s))
}
func main() {
s := MyStr("hello")
fmt.Println(s.Length())
}