Go语言中的struct tag
有时在Go的结构体定义时会看到这样的形式:
type User struct {
UserId int `json:"user_id" bson:"b_user_id"`
UserName string `json:"user_name" bson:"b_user_name"`
}
注意上述红色部分,这就称之为struct tag 。个人理解struct tag的作用类似于Java的注解的作用,在Go语言中可以通过反射机制在运行时动态获取到struct的tag来实现一些特定功能。
下面列出相关参考代码:
package main import (
"encoding/json"
"fmt"
"reflect"
) type User struct {
UserId int `json:"user_id" bson:"b_user_id"`
UserName string `json:"user_name" bson:"b_user_name"`
} func main() { u := &User{UserId: , UserName: "tony"}
j, _ := json.Marshal(u)
fmt.Println(string(j)) // 获取tag中的内容
t := reflect.TypeOf(u)
field := t.Elem().Field()
fmt.Println(field.Tag.Get("json"))
// 输出:user_id
fmt.Println(field.Tag.Get("bson"))
}
Go语言中的struct tag的更多相关文章
- Go语言中的Struct
一.Go语言中没有像C#.Java一样的Class,只有Struct这样的结构体.Go语言使用type关键字来定义一个类型. 如下: type User struct { Name string Ag ...
- C语言中的struct和typedef struct<转载>
原文:http://www.nowamagic.net/librarys/veda/detail/1785 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数 ...
- lua中如何识别C语言中的struct
不如用c写比较简单呢 都要在lua中解析好数据结构,不过也可以用ffi呢...proto.lua
- c语言中struct的初始化
C++中的struct已经和class一样,可以用构造函数初始化. C语言中的struct怎么初始化呢? typedef struct _TEST_T { int i; c ...
- C语言中typedef用法
C语言中typedef用法 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等) ...
- C语言中qsort函数用法
C语言中qsort函数用法-示例分析 本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- 关于C语言中的typedef
在C语言中定义一个结构体,要最好使用typedef,使用typedef,实际上就是为我们的结构体起了一个新的名字,即定义了一个新的类型,在后面书写自己代码的时候,就可以直接使用自己定义的新的类型第一变 ...
- 转]解析C语言中的sizeof
解析C语言中的sizeof 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出 了其操作数的存储大小.操作数 ...
随机推荐
- saltstack pillar
piller组件定义与客户端相关的任何数据(定义在master端),定义好的数据可以被其他组件调用(如state,api) 说通俗了,一句话,就是ansible vars里定义的变量,可以在整个pla ...
- Centos 7 下监控与告警部署
微信消息自动推送 注册企业微信 企业微信地址:https://work.weixin.qq.com 注意:上面我只是做个范例,我实际是有自己的企业微信的,下面的企业微信配置和上面的企业微信名称对不上, ...
- Linxu系统下JDK1.7(rpm)安装
一.JDK下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 二.查看 ...
- 【JAVA】使用IntelliJ IDEA创建Java控制台工程
1.File->New->Project 2.选择Java,下一步 3.模板有两个:Command Line App和Java Hello World,没有太大区别 4.命名: 5.结果:
- MyBatis-CURD
一.接口方法 /** * 删除.修改.添加操作都可以返回三种类型 * Integer.Long.Boolean */ public interface MyUserMapper { public My ...
- 阿里云申请ssl证书配置tomcat访问https
首先去阿里云上面申请ssl证书,免费的,自己百度去. 申请完ok之后会让你下载一个压缩包,里面有四个文件. 在tomcat安装目录下创建cert文件夹,把这四个文件扔进去 在conf/server.x ...
- css3 实现波浪(wave)效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 043、data-packed volume container (2019-03-06 周三)
参考https://www.cnblogs.com/CloudMan6/p/7203285.html volume container 的数据归根到底还是在host上,我们能不能把数据完全放到 ...
- Noisy Channel模型纠正单词拼写错误
本文介绍 Stanford<From Languages to Information>课程中讲到的 单词拼写错误 纠正.背后的数学原理主要是贝叶斯公式.单词拼写错误纠正主要涉及到两个模型 ...
- [译]ES6特性
原文 作用域 使用let/const替代var. var有什么错? var说明的变量会产生作用于提升的概念. ES5: var x = 'outer'; function test(inner) { ...