Golang struct的问题,懂得人请来

有以下的代码:

type B struct {
    Id   int    `json:"id"`
    Name string `json:"name"`
}

type A struct {
    Bs []*B
}

func New() *A {
    return &A{
        Bs: make([]*B, 0),
    }
}

func (a *A) Read() {
    a.Bs = append(a.Bs, &B{
        Id:   1,
        Name: "xingyys",
    })
}

func (a *A) Clear() {
    a = &A{make([]*B, 0)}
    return
}

func main() {
    a := New()
    a.Read()
    a.Clear()
    a.Read()
    a.Clear()
    a.Read()
    b, _ := json.MarshalIndent(a, " ", "    ")
    fmt.Println(string(b))
}

预想输出的应该是:

{
     "Bs": [
         {
             "id": 1,
             "name": "xingyys"
         }
     ]
 }

结果却是:

{
     "Bs": [
         {
             "id": 1,
             "name": "xingyys"
         },
         {
             "id": 1,
             "name": "xingyys"
         },
         {
             "id": 1,
             "name": "xingyys"
         }
     ]
 }

这个是什么原因?请求解答。

阅读 1.7k
2 个回答
func (a *A) Clear() {
    a = &A{make([]*B, 0)}
    return
}

修改成

func (a *A) Clear() {
    a.BS = make([]*B, 0)
    return
}

除了楼上的解决方案,也可以这么写:

func (a *A) Clear() {
    *a = A{make([]*B, 0)}
    return
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题