自定义类型和原始类型之间的区别

时间:2019-09-08 10:48:42

标签: go

我对Go类型有一个快速的疑问。

type mystr string
var s1 mystr = "abc"
var s2 string = "abc"

此处s1始终采用类似于s2的字符串类型。我的问题是,为什么在Go中允许定义这样的 types (属于原始类型)。当我什至无法比较s1和s2

if s1 == s2 // compilation error

这种情况下的用例是什么?

1 个答案:

答案 0 :(得分:3)

它类似于其他编程语言中的扩展方法。您可以将自己的行为添加到您的类型(不能在标准类型中):

type MyStr string

func (s MyStr) Length() int {
    return len(string(s))
}

func main() {
    s := MyStr("hello")
    fmt.Println(s.Length())
}