请记住,当 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] = ... |