pointers - 跨包将结构传递给函数

标签 pointers go struct

为了更加熟悉 go,我正在尝试重构一些已经运行良好的代码。

原始代码具有三个结构:

type ConfigGroup struct {
        Interval int
        Tprefix string
        Target []string
}

type ConfigDefaults struct {
        Interval int
        Sprefix string
}

type Config struct {
    Group map[string]*ConfigGroup
    Defaults ConfigDefaults
}

这些结构像这样传递给函数:

func runpinger(clientStatsd statsd.Statter, defaults *ConfigDefaults, group *ConfigGroup) {
// some stuff here
}

现在,我修改了配置(使用 gocfg)以使用 hcl相反,它似乎提供了更清晰的配置语法。

我已将配置解析器移动到一个包 config 中,其结构如下所示:

type Config struct {
  Interval int            `hcl:"interval"`
  Prefix   string         `hcl:"prefix"`
  Groups   []TargetGroups `hcl:"target_group"`
}

type TargetGroups struct {
  Name     string    `hcl:",key"`
  Prefix   string    `hcl:"prefix"`
  Interval int       `hcl:"interval"`
  Targets  []Targets `hcl:"target"`
}

type Targets struct {
  Address string `hcl:"address"`
  Label   string `hcl:"label"`
}

然后是 config 包中的函数,如下所示:

func Parse(ConfigFile string) (*Config, error) {

  result := &Config{}
  var errors *multierror.Error

  config, err := ioutil.ReadFile(ConfigFile)

  if err != nil {
    return nil, err
  }

  hclParseTree, err := hcl.Parse(string(config))
  if err != nil {
    return nil, err
  }

  if err := hcl.DecodeObject(&result, hclParseTree); err != nil {
    return nil, err
  }

  return result, errors.ErrorOrNil()

}

现在,在我的主包中,我想再次将这些结构传递给函数。我如何跨包执行此操作?

我试过:

func(runpinger config *config.Config) {
 // here
}

但这似乎没有用。理想情况下,我也想传递一个指向“子结构”(即 TargetGroups 结构)的指针,尽管我不确定这是否可能。

最佳答案

您应该能够将结构传递给主包,只需检查您是否将 import "path/to/config" 放在文件的顶部。

路径必须是从 $GOPATH/src/ 目录到你的包的完整路径

关于pointers - 跨包将结构传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685713/

相关文章:

sql - Golang 数据库管理器 api 概念,类型断言错误

iphone - 为什么这个C++(cocos2d,box2d)例子给出的是指针而不是值?

c - 从指针访问结构体成员

ios - 了解分配中结构和类的 Swift 属性的差异

c - SIGSEGV,Windows 中的段错误,但在 Linux 中运行良好

c++ - 为什么不对指针强制执行 constness?

c++ - 从函数 C++ 设置指针变量

json - 自定义 JSON 结构 Unmarshal

c - 为什么整型数组size(array)的返回值恰好是元素个数的4倍?

utf-8 - 在Go中解码ISO-8859-1 XML输入