接收 Slices 和 Maps
发布者:admin 发表于:458天前 阅读数:585 评论:0

请记住,当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。

Bad Good

func (d *Driver) SetTrips(trips []Trip) { d.trips = trips }

trips := ... d1.SetTrips(trips)

// 你是要修改 d1.trips 吗? trips[0] = ... |

func (d *Driver) SetTrips(trips []Trip) { d.trips = make([]Trip, len(trips)) copy(d.trips, trips) }

trips := ... d1.SetTrips(trips)

// 这里我们修改 trips[0],但不会影响到 d1.trips trips[0] = ... |