为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号