gpt4 book ai didi

go - 在 Go 中设置工厂模式

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:03 25 4
gpt4 key购买 nike

我现在有一个工厂模式设置,但我无法让返回的对象在显式初始化时记住任何内容。

我有以下文件:

carBase.go

package Cars

//base class for car factory
type car interface {
Initialise(string, string)
SayCar()
}

丰田.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)
}

关于go - 在 Go 中设置工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com