golang为什么在实现层次树时会覆盖值?

package main


import (

    "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 创建一棵树来存储员工列表。问题是,虽然创建树的值被正确存储,但是当我想打印层次结构树时,它们在主函数中失去了价值。有人可以帮我为什么不存储价值吗?我还添加了日志以进行检查。


精慕HU
浏览 177回答 1
1回答

jeck猫

你的CreateMap方法:func (el EmployeeList) CreateMap(employeesInfo []employee) {    ...}应该:func (el *EmployeeList) CreateMap(employeesInfo []employee) {    //---^    ....}所以这el是一个指针。否则,emplist当您说:emplist.CreateMap(rawEmployeesInfo);所以你做了很多工作来创建你的地图,然后把它扔掉。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go