登录
首页 >  Golang >  Go问答

结构类型之间的转换,涉及未导出字段

来源:stackoverflow

时间:2024-02-15 14:12:26 108浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《结构类型之间的转换,涉及未导出字段》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

从转换规范中,我读到了

在以下任何情况下,非常量值 x 都可以转换为类型 t: [..] 忽略结构标记(见下文),x 的类型和 t 不是类型参数,但具有相同的基础类型。 [..]

根据上述规范,我预计可以编译以下代码

package main

import "github.com/fxtlabs/date"

type date struct {
    day int32
}

func main() {
    _ = date.date(date{12345})
}

但是,它不会编译并显示错误消息

无法将date{…}(date类型的值)转换为date类型。date

注意 "github.com/fxtlabs/date".date 在这里定义为

type Date struct {
    // day gives the number of days elapsed since date zero.
    day int32
}

为什么编译失败?是否因为 "github.com/fxtlabs/date".date 中的字段 day 未导出?如果是的话,不应该在规范中指定吗?


正确答案


是否是因为“github.com/fxtlabs/date”中的现场日未导出?

是的。

如果是的话,不应该在规范中指定吗?

它位于 Type Identity 下的规范中。

如果两个结构类型具有相同的字段序列,并且相应的字段具有相同的名称、相同的类型和相同的标记,则它们是相同的。 不同包中的非导出字段名称始终不同。

换句话说,基础类型不相同,因为它们的字段未导出

相同类型 struct {day int32}(包 a)和 struct{day int32}(包 b)的示例。 不同类型 struct {day int32}(包 a)和 struct{day int32}(包 b)的示例。

终于介绍完啦!小伙伴们,这篇关于《结构类型之间的转换,涉及未导出字段》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>