登录
首页 >  Golang >  Go问答

初始化指针数组 - 无法创建类型 *type

来源:stackoverflow

时间:2024-04-24 17:15:43 290浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《初始化指针数组 - 无法创建类型 *type》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

代码很简单,将 car 类型的对象保存到 car 类型的数组中。我试图在这里使用指针来传递数组引用。

有 2 个问题:

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

无法制作类型 *[]car

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

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

代码:

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
}

解决方案


更改此设置将使您的代码正常工作:

tCars := make([]car, 4)
_cars = &tCars

您观察到它是因为 make 创建了切片、映射或 chan。在您提供的示例中,您尝试创建指向切片的指针,但类型化的 make 无法使用该切片。

这是另一个问题 - 您输入的是“指向汽车切片的指针”,而不是“汽车切片”。一般来说,在使用之前需要初始化指针类型。

总的来说,在您的情况下不需要使用指向切片的指针而不是普通切片,因为您不使用追加,因此没有机会重新分配支持的存储。

但是,在现实场景中,当您不知道要添加的汽车实例数量时,最好使用追加而不是迭代切片直到最后一个非初始化值。

总结:

今天关于《初始化指针数组 - 无法创建类型 *type》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>