Я создал 2 таких структуры:
type HostsFile struct {
path string
masters string
nodes string
}
type AnsInstance struct {
name string
url string
yamlPath string
user string
pass string
branch string
hostsFile *HostsFile
}
HostsFile
struct имеет такие методы:
func (p *HostsFile) SetMasters(masters string) {
p.masters = masters
}
func (p *HostsFile) SetNodes(nodes string) {
p.nodes = nodes
}
и AnsInstance
имеет такой метод, который использует методы из HostFile
struct:
func (p *AnsInstance) PrepInstExec(masters string, nodes string) {
p.hostsFile.SetMasters(masters)
p.hostsFile.SetNodes(nodes)
p.hostsFile.GenerateHostsFile()
}
Когда я выполняю PrepInstExec
следующим образом:
ansInstance.PrepInstExec("lalala,fafafaf", "bakuka,matata")
Я получаю сообщение об ошибке:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x4ccba3]
goroutine 1 [running]:
card-installer/ansexec.(*HostsFile).SetMasters(...)
/home/holo/go/src/card-installer/ansexec/ansexec.go:19
card-installer/ansexec.(*AnsInstance).PrepInstExec(0xc0000c5e90, 0x6d1a2c, 0xe, 0x6d15b9, 0xd)
/home/holo/go/src/card-installer/ansexec/ansexec.go:145 +0x53
main.main()
/home/holo/go/src/card-installer/main.go:101 +0x84e
exit status 2
Что я делаю не так?Можно ли использовать методы exec для одной структуры, которая встроена в другую?
EDIT:
Я создаю новый AnsInstance
таким образом:
func NewAnsInstance(name string, url string, path string) *AnsInstance {
p := new(AnsInstance)
p.name = name
p.url = url
p.yamlPath = path
p.branch = "master"
return p
}