Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 如何在Golang中将多个数据对象传递给HTML模板_Parsing_Templates_Go_Interface - Fatal编程技术网

Parsing 如何在Golang中将多个数据对象传递给HTML模板

Parsing 如何在Golang中将多个数据对象传递给HTML模板,parsing,templates,go,interface,Parsing,Templates,Go,Interface,我将表的所有行作为json返回变量pdata,并将其解组为接口对象。 我有一个user struct的实例,我想将它与未组分的json数据一起传递给render函数,并使用html模板中的字段参数{{.fieldname}}访问它 if uuid != "" { pdata, err := getProduct() if err != nil { fmt.Println(err) } type Prdata struct { P

我将表的所有行作为json返回变量
pdata
,并将其解组为接口对象。 我有一个user struct的实例,我想将它与未组分的json数据一起传递给render函数,并使用html模板中的字段参数
{{.fieldname}}
访问它

if uuid != "" {
    pdata, err := getProduct()
    if err != nil {
        fmt.Println(err)
    } 

    type Prdata struct {
        Puid     string `json:"puid"`
        Pname    string `json:"pname"`
        Quantity string `json:"quantity"`
        Price    string `json:"price"`
        Image    string `json:"image"`
    }

    // Obj:= make(map[Prdata]string)

    var Pr Prdata

    err = json.Unmarshal(pdata , &Pr)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(pdata))
    fmt.Println(Pr)
    fmt.Println(u)

    render(w, "internal", Pr)
}
    str := `{
    "image": "1Appleiphone7.jpeg",
    "pname": "iphone7",
    "price": "70000",
    "puid": "d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
    "quantity": "100"
    }`
fmt.Println(字符串(pdata))
给出此输出

[{“image”:“1Appleiphone7.jpeg”,“pname”:“iphone7”,“price”:“70000”,“puid”:“d6742e4e-2ad6-43c5-97f4-e8a7b00684e2”,“quantity”:“100”}]

我只成功地将数据解组到
接口{}
对象中。尝试使用
接口{}
类型的键和
字符串
类型的值创建映射,但会引发错误:

“json:无法将数组解组为map[interface{}]string类型的Go值”

render函数接受类型为
interface{}

func render(w http.ResponseWriter, name string, data interface{})
fmt.Println(Pr)
给出以下输出:

[地图[数量:100图片:1Appleiphone7.jpeg pname:iphone7价格:70000 puid:d6742e4e-2ad6-43c5-97f4-e8a7b00684e2]]

u
是struct
User

var u = &User{}

type User struct {
    Uuid     string            
    Username string           
    Password string           
    Fname    string            
    Email    string            
}
我可以使用管道
{{.}
在html页面上看到输出。但是,我无法使用fieldname访问任何数据

一定有办法做到这一点。但我不知道怎么做

当我传递下面类型的json时,我能够将其传递给struct类型,并使用模板中的管道通过键值引用它

if uuid != "" {
    pdata, err := getProduct()
    if err != nil {
        fmt.Println(err)
    } 

    type Prdata struct {
        Puid     string `json:"puid"`
        Pname    string `json:"pname"`
        Quantity string `json:"quantity"`
        Price    string `json:"price"`
        Image    string `json:"image"`
    }

    // Obj:= make(map[Prdata]string)

    var Pr Prdata

    err = json.Unmarshal(pdata , &Pr)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(pdata))
    fmt.Println(Pr)
    fmt.Println(u)

    render(w, "internal", Pr)
}
    str := `{
    "image": "1Appleiphone7.jpeg",
    "pname": "iphone7",
    "price": "70000",
    "puid": "d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
    "quantity": "100"
    }`
解组函数

err = json.Unmarshal([]byte(str), &Pr)

DB记录
pdata
的json数据与上面的
str
的json数据的区别在于使用了倒勾“`”。虽然json数据显示键值对,但它实际上是一个json数组,而不是json对象。有没有办法解决这个问题?

您不需要使用
map[interface{}]字符串来解组json对象。您的json相当于地图的切片:

[
    {
        "image":"1Appleiphone7.jpeg",
        "pname":"iphone7",
        "price":"70000",
        "puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
        "quantity":"100"
    }
]
要解组的对象应该是带有字符串键和值的贴图切片:

var Pr []map[string]string

顺便说一句,我相信这里隐藏着误解:

render函数接受接口{}类型的参数


我的意思不是说你必须在那里传递
接口{}
类型的变量,而是说你可以将任何类型的变量传递给
呈现
函数。

我正在发布一个将json作为字节解包到结构类型的工作示例,然后可以使用模板中的
{.}
引用该结构类型

包干管

import (
    "encoding/json"
    "fmt"
)

type Usrdata struct {
    Uuid  string
    Fname string
}

type Prdata struct {
    Puid     string `json:"puid"`
    Pname    string `json:"pname"`
    Quantity string `json:"quantity"`
    Price    string `json:"price"`
    Image    string `json:"image"`
}

type Data struct {
    U Usrdata
    P []Prdata
}

func main() {
    Ur := Usrdata{Uuid: "xyz", Fname: "Somename"}
    Pr := make([]Prdata, 0)
    var Dt Data
    Dt.U = Ur
    pdata := `[{"image":"1Appleiphone7.jpeg","pname":"iphone7","price":"70000","puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2","quantity":"100"}]`
    err := json.Unmarshal([]byte(pdata), &Pr)
    if err != nil {
        fmt.Println(err)
    }
    Dt.P = Pr
    fmt.Println(Pr[0].Pname)
    fmt.Println(Pr)
    fmt.Println(Dt)
}

尝试映射[string]接口{}您的问题是关于解组(据我所知),而不是关于模板。请将主题改为“用GoLang解组多项目json”。也许我需要做的是创建一个包含product struct字段的结构,另一个结构表示包含User和product类型的数据。我需要将json解组到产品结构中,并将数据传递给呈现函数。我一直在尝试,但没能把它弄对。你可以根据自己的需要解组jason obj,但我不知道什么是类型产品,也不知道如何在我从未见过的代码中使用它。我所能想到的是,您所发布的JSON-OBJ可以轻松地解封到[MA] MAP[String ]字符串。