我正在学习去,我需要了解一些东西。我收到的错误很少。我创建了一个 Product 结构并附加了一个函数。我还得到了一个产品列表作为切片。实际上,我正在关注一个示例。我只是想向它添加不同的端点。


我在代码的注释中添加了问题。请解释。我需要返回 json 单个对象作为对用户的响应。请指导我。



package data 


type Product struct {

    ID          int     `json:"id"`

    Name        string  `json:"name"`

    Description string  `json:"description"`

    Price       float32 `json:"price"`

    SKU         string  `json:"sku"`

    CreatedOn   string  `json:"-"`

    UpdatedOn   string  `json:"-"`

    DeletedOn   string  `json:"-"`

}


type Products []*Product



func (p *Products) ToJSON(w io.Writer) error {

    e := json.NewEncoder(w)

    return e.Encode(p)

}


func (p *Product) FromJSON(r io.Reader) error {

    d := json.NewDecoder(r)

    return d.Decode(p)

}


var ErrProductNotFound = fmt.Errorf("Product not found")



func GetProduct(id int) (*Product, error) {       // this is returning *Product & err. When I use this in GetProduct in handler func it is giving error

    for _, p := range productList {

        if p.ID == id {

            fmt.Println(p)

            return p, nil

        }

    }

    return nil, ErrProductNotFound

}


var productList = []*Product{    **// Why in example the teacher doing it like this.** []*Product{&Product{}, &Product{}} **what it the reason? Please explain.

    &Product{                             // this gives warning : redundant type from array, slice, or map composite literal. need to understand why**


        ID:          1,

        Name:        "Latte",

        Description: "chai",

        Price:       2.45,

        SKU:         "abc123",

        CreatedOn:   time.Now().UTC().String(),

        UpdatedOn:   time.Now().UTC().String(),

    },

    &Product{

        ID:          2,

        Name:        "Tea",

        Description: "chai",

        Price:       1.45,

        SKU:         "abc1234",

        CreatedOn:   time.Now().UTC().String(),

        UpdatedOn:   time.Now().UTC().String(),

    },

}

package handlers