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

标签 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())
}

关于go - 自定义类型和原始类型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841244/

相关文章:

go - 如何在 GO 中将包含斜杠的 url 作为路径参数传递?

performance - http.Handle wrapper pattern -> 堆栈会膨胀吗?

go - 子文件夹中的深度匹配模板文件

go - 导入的 Golang 包说未定义/不可用

go - 如何测试实现 gorilla 上下文的函数

go - 如何将 HttpRouter 与 MuxChain 一起使用?

google-app-engine - Go 中的 Google App Engine 数据存储分片

regex - 正则表达式从开始到换行都获取每个字符串?

reflection - 反射:字符串构造

arrays - Go中的JSON解码有符号整数数组