首页 > 解决方案 > 自定义类型和原始类型之间的区别

问题描述

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

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

这里 s1 总是采用类似于 s2 的字符串类型。我的问题是,为什么在 Go 中允许定义这样的类型(它们是原始类型)。当我什至无法将 s1 与 s2 进行比较时

if s1 == s2 // compilation error

这种场景的用例是什么?

标签: go

解决方案


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

type MyStr string

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

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

推荐阅读