1 回答

TA貢獻1872條經驗 獲得超4個贊
您編寫的代碼在編譯時不會彈出 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 關注
- 161 瀏覽
添加回答
舉報