关于Go语言,自定义结构体标签的一个妙用.

在Go中首字母大小写,决定着这此变量是否能被外部调用,

例如:在使用标准库的json编码自定一的结构的时候:

<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-weight:600; color:#000080;">package</span><span style=" color:#c0c0c0;"> </span>main

import (
    "encoding/json"
    "fmt"
)

type T struct {
    name string
    Age  int
}

func main() {
    var info T = T{"fyxichen", 24}
    fmt.Println("编码前:",info)
    b, _ := json.Marshal(info)
    fmt.Println("编码后:",string(b))
}

运行结果是:

编码前: {fyxichen 24}

编码后: {"Age":24}
在这里name的值并未被编码,原因接收首字母是小写,外部不能调用导致的.

当我们用json和外部API进行交互的时候,别的程序语言不像Go这样用大小写来控制变量的作用域.所以下面这个标签的使用,会用起来更舒服.

package main

import (
	"encoding/json"
	"fmt"
)

type T1 struct {
	Name string
	Age  int
}
type T2 struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	var info1 T1 = T1{"fyxichen", 24}
	var info2 T2 = T2{"fyxichen", 24}
	b, _ := json.Marshal(info1)
	fmt.Println("Struct1:", string(b))
	b, _ = json.Marshal(info2)
	fmt.Println("Struct2:", string(b))
}

运行结果:

Struct1 :{"Name":"fyxichen","Age":24}

Struct2 :{"name":"fyxichen","age":24}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 06:40:38

关于Go语言,自定义结构体标签的一个妙用.的相关文章

关于Go语言,自己定义结构体标签的一个妙用.

在Go中首字母大写和小写,决定着这此变量能否被外部调用, 比如:在使用标准库的json编码自定一的结构的时候: <pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-weight:600; color:#000080;">package</span><span style=" color:#c0c0c0;"> <

【剑仙教程】易语言的结构体。自定义数据类型。

1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言的IDE,IDE,是开发环境. 点击“插入”菜单,选择“数据类型” 这时,代码编辑框就会增加一个数据类型的窗口. 把“数据类型1”命名为“精易_座标”,勾选“公开项”. 这样,一个 精易_座标 的类就做好了. . 再按回车键,给这个类增加2个成员. x 整数型 y 整数型 . 访问时,直接写代码就O

黑马程序员---C语言基础---结构体

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------ C语言基础---结构体 一.什么是结构体 介绍结构体之前,我想先简单介绍下数组.我想大家对数组都再熟悉不过了,顾名思义,数组就是将一些数据(元素)组合在一起,作为一个整体.使用数组需要注意的是这些元素必须是相同类型.而结构体和数组类似,也是将一些数据组合在一起作为一个整体,但是这些元素可以是不同类型.可以这么理解:结构体是更加灵活的数组,因为它允许元素是不同的类型. 实际生活中,如果我们要

typedef 和 自定义结构体类型

在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列. 1 /*定义单链表结点类型*/ 2 3 typedef char ElemType; 4 5 typedef struct dNode {//声明单链表结点类型 6 7 ElemType data; 8 9 struct dNode *next; //指针域 }LNode, *LinkList; //定义此结构体变量stru

C#语言基础——结构体和枚举类型

结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明含有成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法: 接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:     对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Swift中也有一样用法的结构体.毕竟Swfit是集大家之所成的现代语言.

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----05 结构体

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.什么是结构体 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型.为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的. 二.结构体的定义 结构体内部的元素,也就是

c语言的结构体字节数统计

struct结构体的字节数 等于 结构体中最大类型的字节数的倍数. 如:?typedef struct Student{??? short id; //2个字节??? char name[15]; //1*15个字节??? int age; //4个字节??? char num; //1个字节} Student; 总共28个字节. c语言的结构体字节数统计

C语言的结构体和 C++结构体的区别

 C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的初始化方法> 接着下面两个代码截图(一个是C源码,一个是C++源码)对比你就初步体会到C语言的结构体和C++结构体的区别了:      对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Sw