如果你想象我有以下聲明:type Car struct { Vehicle engineType string}type Bus struct { Vehicle public bool engineType string}type Bike struct { Vehicle motorbike bool}type Vehicle struct { NumberWheels int NumberPassengers int Owner string}type Vehicles []Vehicle我正在嘗試擁有一系列車輛。然而,這是不可能的,因為他們每個人都有不同的類型(即Car,Bus,Bike,等...)var myCar = Car{Vehicle{4, 4, "Me"}, "Manual"}var myBike = Bike{Vehicle{2, 0, "Bob and I"}, false}var myVehicles = Vehicles{myCar, myBike}for i := range myVehicles { fmt.Println(myVehicles[i])}你將如何實現(xiàn)這樣的事情。還是我試圖從錯誤的角度解決這個問題。我是 Go 的新手
1 回答

侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
Vehicle
被嵌入Car
和Bus
,所以你得到的東西在錯誤的方向前進(jìn)......這不像Vehicle
是一個父類,所以你不能得到你正在尋找出這個設(shè)計的多態(tài)行為。你需要的是一個接口。
為了向您展示一個工作示例,我將使用空接口(它將允許您在集合中存儲任何類型)。對于您的實際程序,您可能想要制作類似IVehicle
界面的東西,并在其上放置所有車輛將擁有的任何通用方法,可能是類似的東西Start()
或其他任何東西......
https://play.golang.org/p/iPJbFYlo7o
稍微擴(kuò)展一下嵌入的東西......這不是繼承。你可以用它完成同樣的事情,但是“汽車是一種交通工具”這句話是不正確的。這實際上更像是“Car has a Vehicle”的組合。只是它Vehicle
的字段和方法被“提升”了Car
,這意味著它們可以從 的實例中訪問,Car
而無需像Car.Vehicle.FieldOnVehicle
. 那不是你真正要找的。如果你想說“Car is a Vehicle”并且它是真的,那么Vehicle
需要是一個Car
實現(xiàn)的接口。
- 1 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報
0/150
提交
取消