zoukankan      html  css  js  c++  java
  • Go语言从入门到放弃(结构体常见的tag)

    什么是tag

    Tag是结构体中某个字段别名, 可以定义多个, 空格分隔

    type Student struct {
        Name string `ak:"av" bk:"bv" ck:"cv"`
    }

    使用空格来区分多个tag,所以格式要尤为注意

    tag的作用

    tag相当于该字段的一个属性标签, 在Go语言中, 一些包通过tag来做相应的判断

    举个例子, 比如我们有一个结构体

    type Student struct {
        Name string
    }

    然后我们将一个该结构体实例化一个 s1

    s1 := Student{
            Name: "s1",
        }

    再将 s1 序列化

    v, err := json.Marshal(s1) // json.Marshal方法,json序列化,返回值和报错信息
    if err != nil { // 不为nil代表报错
        fmt.Println(err)
    }
    fmt.Println(string(v)) // []byte转string, json

    此时 string(v) 为 

    {
      "Name": "s1"  
    }

    因为在 Go 语言中, 结构体字段要想为外部所用就必须首字母大写, 但是如果这个 s1 是返回给前端的, 那每个字段都首字母大写就很怪, 此时我们可以给 Student 加tag解决

    结构体修改为

    type Student struct {
        Name string`json:"name"`
    }

    序列化时, 会自己找到名为 json 的tag, 根据值来进行json后的赋值

    因此 string(v) 为

    {
      "name": "s1"  
    }

    常用tag记录

    json

    json序列化或反序列化时字段的名称

    db

    sqlx模块中对应的数据库字段名

    form

    gin框架中对应的前端的数据字段名

    binding

    搭配 form 使用, 默认如果没查找到结构体中的某个字段则不报错值为空, binding为 required 代表没找到返回错误给前端

  • 相关阅读:
    centos ssh远程登陆
    Vim 技巧
    php and js to facebook登陆 最佳实践
    vim 编辑器常规操作
    js 函数定义三种方式
    ORDER BY 默认升序排列
    sql = 和<>遵循的sql-92标准的设置SET ANSI_NULLS ON
    添加FB登陆时,需要curl扩展
    array(1) { [0]=> int(5) }和array(1) { [0]=> string(1) "5" }
    Android第三方推送引擎比较
  • 原文地址:https://www.cnblogs.com/chnmig/p/11382390.html
Copyright © 2011-2022 走看看