在 Go 中设置工厂模式
Setting up a Factory Pattern in Go
我现在有一个工厂模式设置,但我无法让返回的对象在显式初始化时记住任何内容。
我有以下文件:
carBase.go
package Cars
//base class for car factory
type car interface {
Initialise(string, string)
SayCar()
}
toyota.go
package Cars
import (
"fmt"
)
type toyotaCar struct {
carType string
colour string
}
func (car toyotaCar) Initialise(col, carType string){
car.colour = col
car.carType = carType
}
func (car toyotaCar) SayCar(){
fmt.Println(car.carType)
fmt.Println(car.colour)
}
carFactory.go
package Cars
func GetCar(carType string) (car) {
switch carType {
case "toyota":
return new(toyotaCar)
}
return new(toyotaCar)
}
最后是 main.go
package main
import (
"FactoryTest/Cars"
"fmt"
)
func main() {
car := Cars.GetCar("toyota")
fmt.Println(car)
car.Initialise("thing" , "otherthing")
fmt.Println(car)
car.SayCar()
fmt.Println(car)
}
在每一行 fmt.Printn(car)
中,我得到 &{ }
,这表明没有设置任何内容。当我 运行 car.SayCar()
没有打印出来。
我只是想在这里强加这个问题,还是我缺少一些简单的东西来完成这项工作?
问题是在汽车被方法接收时没有使用指针:
toyota.go 变为:
package Cars
import (
"fmt"
)
type toyotaCar struct {
carType string
colour string
}
func (car *toyotaCar) Initialise(col, carType string){
car.colour = col
car.carType = carType
}
func (car *toyotaCar) SayCar(){
fmt.Println(car.carType)
fmt.Println(car.colour)
}
我现在有一个工厂模式设置,但我无法让返回的对象在显式初始化时记住任何内容。
我有以下文件:
carBase.go
package Cars
//base class for car factory
type car interface {
Initialise(string, string)
SayCar()
}
toyota.go
package Cars
import (
"fmt"
)
type toyotaCar struct {
carType string
colour string
}
func (car toyotaCar) Initialise(col, carType string){
car.colour = col
car.carType = carType
}
func (car toyotaCar) SayCar(){
fmt.Println(car.carType)
fmt.Println(car.colour)
}
carFactory.go
package Cars
func GetCar(carType string) (car) {
switch carType {
case "toyota":
return new(toyotaCar)
}
return new(toyotaCar)
}
最后是 main.go
package main
import (
"FactoryTest/Cars"
"fmt"
)
func main() {
car := Cars.GetCar("toyota")
fmt.Println(car)
car.Initialise("thing" , "otherthing")
fmt.Println(car)
car.SayCar()
fmt.Println(car)
}
在每一行 fmt.Printn(car)
中,我得到 &{ }
,这表明没有设置任何内容。当我 运行 car.SayCar()
没有打印出来。
我只是想在这里强加这个问题,还是我缺少一些简单的东西来完成这项工作?
问题是在汽车被方法接收时没有使用指针:
toyota.go 变为:
package Cars
import (
"fmt"
)
type toyotaCar struct {
carType string
colour string
}
func (car *toyotaCar) Initialise(col, carType string){
car.colour = col
car.carType = carType
}
func (car *toyotaCar) SayCar(){
fmt.Println(car.carType)
fmt.Println(car.colour)
}