亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang為什么在實現層次樹時會覆蓋值?

golang為什么在實現層次樹時會覆蓋值?

Go
精慕HU 2022-10-24 09:01:18
package mainimport (    "encoding/json"    "fmt")type employee struct {    Name      string      `json:"name"`    Id        int         `json:"id,omitempty"`    ManagerId int         `json:"managerid"`    Reporters []employee `json:"reporters,omitempty"`}// type employees struct {//  employees []employee `json:"employee"`// }type EmployeeList struct {    employees map[int]employee    root  employee}func NewEmployeeList() *EmployeeList {    var el EmployeeList    el.employees = make(map[int]employee)    return &el}func (el *EmployeeList) CreateMap(employeesInfo []employee) {        for _ , emp := range employeesInfo {        e := employee{            Name : emp.Name,            Id: emp.Id,            ManagerId: emp.ManagerId,        }        el.employees[emp.Id] = e        if(emp.ManagerId == 0){            el.root = e            fmt.Println("CreateMap",el.root)        }    }    fmt.Println("CreateMap2",el.root,el.employees)}func (el *EmployeeList) getReportersById(empId int) []employee {         reporters := []employee{}    for _ , employee := range el.employees {        if(employee.ManagerId == empId){            reporters = append(reporters, employee)        }    }    return reporters}func (el *EmployeeList) maketree(e *employee) {      //e := root    e.Reporters = el.getReportersById(e.Id)    if(true){        fmt.Println("maketree",e.Id,e.Name,e.Reporters)    }    // e.Reporters = reporters    if(len(e.Reporters) == 0){        return    }    for _ , reporterEmployee := range e.Reporters {        el.maketree(&reporterEmployee);    }}我正在嘗試從 json 創建一棵樹來存儲員工列表。問題是,雖然創建樹的值被正確存儲,但是當我想打印層次結構樹時,它們在主函數中失去了價值。有人可以幫我為什么不存儲價值嗎?我還添加了日志以進行檢查。
查看完整描述

1 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

你的CreateMap方法:


func (el EmployeeList) CreateMap(employeesInfo []employee) {

    ...

}

應該:


func (el *EmployeeList) CreateMap(employeesInfo []employee) {

    //---^

    ....

}

所以這el是一個指針。否則,emplist當您說:


emplist.CreateMap(rawEmployeesInfo);

所以你做了很多工作來創建你的地圖,然后把它扔掉。


查看完整回答
反對 回復 2022-10-24
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號