为了账号安全,请及时绑定邮箱和手机立即绑定

为什么将结构传递给当前包中带有文字结构参数的函数与另一个包中的函数不同?

为什么将结构传递给当前包中带有文字结构参数的函数与另一个包中的函数不同?

Go
当年话下 2021-09-27 21:11:46
这完美地工作:package mainimport "fmt"type Struct struct {    field string}func Fn(arg struct{field string}) {    fmt.Println(arg)}func main() {    Fn(Struct{"john"})}但这给出了./main.go:12: cannot use Struct literal (type Struct) as type struct { field string } in argument to sub.Fn:main.gopackage mainimport "go_tests/sub"type Struct struct {    field string}func main() {    sub.Fn(Struct{"john"})}子/子.gopackage subimport "fmt"func Fn(arg struct{field string}) {    fmt.Println(arg)}函数调用的唯一变化是Fn(Struct{"john"})被替换为sub.Fn(Struct{"john"}).为什么将函数移到另一个包会影响类型逻辑?链接到文档将不胜感激。
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您需要导出结构字段:

type Struct struct {
    Field string
    }

然后还更改调用以使用导出的字段:

func Fn(arg struct{Field string}) {
    fmt.Println(arg)
    }

语言规范(特别是最后一句):

对于结构文字,以下规则适用:

  • 键必须是在 LiteralType 中声明的字段名称。

  • 不包含任何键的元素列表必须按照字段声明的顺序为每个结构字段列出一个元素。

  • 如果任何元素有键,则每个元素都必须有键。

  • 包含键的元素列表不需要为每个结构字段都有一个元素。省略的字段获得该字段的零值。

  • 文字可以省略元素列表;这种文字的计算结果为零值。

  • 为属于不同包的结构的非导出字段指定元素是错误的。


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信