首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go:命名类型断言和转换

Go:命名类型断言和转换
EN

Stack Overflow用户
提问于 2013-09-09 13:25:26
回答 1查看 15.3K关注 0票数 15

如果我有一个自定义类型,只是简单地用名称重新定义了一个预定义类型:

代码语言:javascript
运行
复制
type Answer string

我尝试在一个接受预定义类型的函数中使用它:

代码语言:javascript
运行
复制
func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    type Answer string
    var ans Answer = "hello"

    // cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)          
    // invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string)) 
    // Does work, but I don't understand why if the previous doesn't:
    acceptMe(string(ans))
}

为什么类型断言失败,但转换有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-09 13:35:24

类型断言仅适用于接口。接口可以有任意的底层类型,所以我们有类型断言和类型切换来拯救。类型断言返回bool作为第二个返回值,以指示断言是否成功。

您的自定义类型Answer只能有一个基础类型。您已经知道了确切的类型- Answer和底层类型- string。您不需要断言,因为到底层类型的转换总是成功的。

老生常谈:

只需将您的自定义类型转换为string。由于您的自定义类型将string作为基础类型,因此转换将会成功。转换语法:字符串(Ans)。Go Play

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18691927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档