gpt4 book ai didi

go - 导入的结构用作匿名字段

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:56 26 4
gpt4 key购买 nike

所以我正在尝试编写一些 Go 文件,以便有一个面向公众的包和一个内部包。

在面向公众的包中,有一个结构与内部结构几乎相同(缺少一个字段)。

我想过在内部结构体中使用匿名字段,但似乎不太好玩。


例子:

public/public.go:

package public

type PublicStruct struct {
Field1 bool `json:"fetchStats"`
}

数据/数据.go

package data

import publicData "public"

type InternalStruct struct {
publicData.PublicStruct
Field2 bool `json:"includeHidden:`
}

过滤器/过滤器.go:

package filter

import "data"

func test() {
tmp := data.InternalStruct{Field1: true, Field2: false}
}

main.go:

package main

import "filter"
import "data"

func main() {
var tmp data.InternalStruct
tmp.Field1 = true
tmp.Field2 = true
filter.Test()
}

预期:没有问题

结果:filter/filter.go:6: unknown data.InternalStruct field 'Field1' in struct literal


为什么这不起作用,我应该怎么做才能让它起作用(我目前在两种结构方法中都使用重复参数)?


PS:我不知道如何在 go playground 中测试它,因为它涉及多个文件。

最佳答案

问题是 field1 没有被公共(public)包导出,因为它的名字是小写的。如果它是 Field1,那么您可以在内部包中访问它,例如 MyInternalStructInstance.Field1

编辑 - 解决 OP 的更新问题;

您在 main 中用于初始化的语法是错误的。应该是:

tmp := InternalStruct{PublicStruct: PublicStruct{Field1: true}, Field2: false}

它与包或导入与导出无关。它可以很容易地在 Playground 上进行测试,这里有一个完整的例子; https://play.golang.org/p/tbCqFeNStd

关于go - 导入的结构用作匿名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com