背景:需要对几个类似的结构体(拥有相同的方法)做相同的操作,用interface类型可以轻松地实现。 如下例所示,RouteDaySumModel和RouteMonthSumModel拥有相同的function,当需要对其做Fix操作时,可以定义一个interface类型FixSummary来处理: package main import ( "time" "fmt" ) //日表汇总 type RouteDaySumModel struct { Id int64 UserId string CurDay time.Time SportsType int Count int TotalLength float64 TotalTime float64 TotalCalory float64 } func (rdsM *RouteDaySumModel) Print() { fmt.Println(rdsM) } func (rdsM *RouteDaySumModel) SetValue(totalTime, totalLength, totalCalory float64, count int) { rdsM.TotalTime = totalTime rdsM.TotalLength = totalLength rdsM.TotalCalory = totalCalory rdsM.Count = count } //月表汇总 type RouteMonthSumModel struct { Id int64 UserId string CurDay time.Time SportsType int Count int TotalLength float64 TotalTime float64 TotalCalory float64 } func (rmsM *RouteMonthSumModel) Print() { fmt.Println(rmsM) } func (rmsM *RouteMonthSumModel) SetValue(totalTime, totalLength, totalCalory float64, count int) { rmsM.TotalTime = totalTime rmsM.TotalLength = totalLength rmsM.TotalCalory = totalCalory rmsM.Count = count } type FixSummary interface { SetValue(totalTime, totalLength, totalCalory float64, count int) Print() } func Fix(totalTime, totalLength, totalCalory float64, count int, obj FixSummary) { obj.SetValue(totalTime, totalLength, totalCalory, count) obj.Print() } func main() { rdsM := RouteDaySumModel{ UserId: "baixiao0", } rdsM.Print() Fix(11.11, 22.22, 33.33, 1, &rdsM) rmsM := RouteMonthSumModel{ UserId: "baixiao1", } rmsM.Print() Fix(99.99, 88.88, 77.77, 2, &rmsM) }