Pointers 初始化指针数组-无法将类型*[]设为类型

Pointers 初始化指针数组-无法将类型*[]设为类型,pointers,go,struct,Pointers,Go,Struct,这是一个简单的代码,将car-type对象保存到car-type数组中。我试图在这里使用指针来传递数组引用 有两个问题: 1-我无法将其初始化为空数组。当我使用make时,它会说: 无法生成类型*[]car 2-如果不使用make,则会发生运行时错误: 死机:运行时错误:无效内存地址或零指针取消引用 代码: 1-无法生成类型*[]车辆 你观察它是因为make创建了slice、map或chan。在您给出的示例中,您试图创建指向一个切片的指针,而该切片不是make使用的类型 2-如果不使用make,

这是一个简单的代码,将car-type对象保存到car-type数组中。我试图在这里使用指针来传递数组引用

有两个问题:

1-我无法将其初始化为空数组。当我使用make时,它会说:

无法生成类型*[]car

2-如果不使用make,则会发生运行时错误:

死机:运行时错误:无效内存地址或零指针取消引用

代码:

1-无法生成类型*[]车辆

你观察它是因为make创建了slice、map或chan。在您给出的示例中,您试图创建指向一个切片的指针,而该切片不是make使用的类型

2-如果不使用make,则会发生运行时错误:

这是另一个问题-你有一个指向汽车切片的类型指针,而不是汽车切片。通常,在使用之前需要初始化指针类型

总的来说,在您的情况下,不需要使用指向片的指针,而不需要使用普通片,因为您不需要使用append,这样就没有机会重新分配备份存储

然而,在真实场景中,当您不知道要添加的汽车实例数量时,最好使用append,而不是通过slice迭代到最后一个未初始化的值

总结:

要使您的程序工作,请将*[]车更改为[]车,例如 另一种可能更好的方法是使用append而不是saveCar。在发生重新分配时,不要忘记使用返回值,例如:
更改此选项将使代码正常工作:

tCars:=制造[]辆汽车,4 _cars=&TCAR
你能更具体地说,你在这里想要实现什么,你在这里想要实现什么,看起来你做得不对。我正在尝试创建一个数组,并使用函数saveCar填充它。如果按值传递数组,则不会更新主数组。所以我试图传递数组的指针,这给了我上面的错误。你们不认为映射会更好,若你们要删除值。如果没有,那么append可以正常工作,只需将返回的数组存储到同一个变量。a=appenda,x…tCars:=make[]car,4_cars=&tCars,顺便说一句,我们在go中不使用下划线。你最后的评论,它完成了任务。我将&tCars传递给我的函数。把它作为答案贴出来,这样我就可以接受了。
import "fmt"

type car struct {
    plate string
    color string
}

func main() {

    var _cars *[]car        // list of cars
    _cars = make(*[]car, 4) // initialize empty cars list

    saveCar(_cars, car{"ABC-123", "Black"})
    saveCar(_cars, car{"ABC-456", "Black"})
    saveCar(_cars, car{"ABC-789", "Black"})

    fmt.Println(_cars)
}

func saveCar(_cars_list *[]car, _car car) int {

    for index, current := range *_cars_list {
        // if empty place found, save car
        if (car{}) == current {

            // save car
            (*_cars_list)[index] = _car

            // return the saved index
            return index
        }
    }

    return -1
}