登录
首页 >  Golang >  Go问答

Go 结构标记抛出错误:“字段标记应为字符串”

来源:stackoverflow

时间:2024-03-09 22:09:28 228浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《Go 结构标记抛出错误:“字段标记应为字符串”》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我是第一次使用 go,并且正在设置一个小示例 api。在尝试从我创建的结构返回 json 对象时,当我向字段添加结构标记时,出现此错误:

“字段标记必须是字符串”和“无效字符文字(多个字符)”。

这是我的代码细分。我在这里缺少什么?

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/demo/v1/version", getVersion).Methods("GET")    
    log.Fatal(http.ListenAndServe(":8080", router))    
}


func getVersion(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    version := Version{ID: "demo", Version: "1.0.0", Sha: "some hash...."}
    var myJSON, err = json.Marshal(version)

    json.NewEncoder(w).Encode(myJSON)

}

type Version struct {
    //ERRORS on these 3 lines:
    ID      string 'json:"id"'
    Version string 'json:"version, omitempty"'
    Sha     string 'json:"sha"'
}

解决方案


您需要使用反引号封装结构标记,而不是使用单引号来创建原始字符串文字,这样可以在标记字段中包含其他数据。

This 帖子对标签以及它们如何正确构建进行了很好的解释,如果需要,应该作为进一步解释的良好参考。

这里的工作代码:

package main

import (
    "encoding/json"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

type Version struct {
    ID      string `json:"id"`
    Version string `json:"version, omitempty"`
    Sha     string `json:"sha"`
}

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/demo/v1/version", getVersion).Methods("GET")
    log.Fatal(http.ListenAndServe(":8080", router))
}

func getVersion(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    version := Version{ID: "demo", Version: "1.0.0", Sha: "some hash...."}
    var myJSON, err = json.Marshal(version)
    if err != nil {
        // handle error
    }
    json.NewEncoder(w).Encode(myJSON)
}

终于介绍完啦!小伙伴们,这篇关于《Go 结构标记抛出错误:“字段标记应为字符串”》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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