1 回答
TA贡献1872条经验 获得超3个赞
您编写的代码在编译时不会弹出 nil 错误。它只会在您以错误的方式使用它时导致 nil 点错误。
failuresInCommits map[string][]string你后来用了吗make()?
Failures map[git_repo.FilePath]*FailureData你在'make()'之后使用过这个吗?
好的,现在你专注于 ok := r.Failures[filePath].failuresInCommits,你确定r.Failures[filePath]返回'failuresIncommits,true',
如果不是,那么 r.Failures[filePath] 是 nil,好吧,你告诉我什么是nil.failuresInCommits.
还有一个风险是你只能在这个特定的包中使用 x.failureInCommits。如果你在其他一些包中做同样的事情,x.failureInCommits 将无法访问,因为字段小写限制。
怎么做 ?
package main
type FilePath string
type FailureData struct {
failuresInCommits map[string][]string
}
func NewFailureData() FailureData {
return FailureData{
failuresInCommits: make(map[string][]string, 0),
}
}
func (fd *FailureData) Set(k string, v []string) {
fd.failuresInCommits[k] = v
}
type DetectionResults struct {
Failures map[FilePath]*FailureData
//Have other things
}
func NewDetectionResults() *DetectionResults {
return &DetectionResults{
Failures: make(map[FilePath]*FailureData, 0),
}
}
func (dr *DetectionResults) Set(fp FilePath, fd *FailureData) {
dr.Failures[fp] = fd
}
func main() {
fd := NewFailureData()
dr := NewDetectionResults()
comments := []string{"push error", "commit error", "add error"}
fd.Set("hash-18ef8abujce8fad0h8j", comments)
dr.Set("/etc/go/gopath/src/github.com/xxx/xxx/main.go: 12", &fd)
}
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报