Pointers 跨包将结构传递给函数

Pointers 跨包将结构传递给函数,pointers,go,struct,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[str

为了更加熟悉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)以使用,它似乎提供了更清晰的配置语法

我已经将配置解析器移动到一个包中,
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"`
}
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()

}
然后是
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"`
}
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/
目录到您的包的完整路径

谢谢,这正是我所做的。我不知道为什么我觉得这很难,但它现在起作用了