首页 > 解决方案 > 调用方法时如何更改包类型?

问题描述

我在 Go 中有这个包

package dao

import (
    "fmt"
    "log"
)

type Product struct {
    Name      string
    Price     string
    SalePrice string
    ID        string
    URL       string
}

var products []Product

func New(name string, price string, saleprice string, url string, id string) *Product {
    return &Product{
        Name:      name,
        Price:     price,
        SalePrice: saleprice,
        URL:       url,
        ID:        id,
    }
}

func (p *Product) Add() {
    products = append(products, p)
}

但是当我在位于根级别的 main.go 中使用它时,我不能这样p.Add()调用

p := dao.New("hello", "10", "20", "http", "id")
p.Add()

我得到的错误是这个cannot use p (type *Product) as type Product in append,当我检查 Product.Add() 中的类型时,我得到*dao.Product.

main里面的类型是product.Product而不是product。类型不同。我该如何管理?

标签: go

解决方案


您正在尝试将指向结构的指针附加到 Product 切片而不是 *Product 切片。快速的解决方案是改变

var products []Product

进入

var products []*Product

推荐阅读