首页 > 其他分享 >go 结构体嵌入

go 结构体嵌入

时间:2023-08-07 12:11:48浏览次数:25  
标签:嵌入 SteamInfo game json go SteamData 结构

在Go语言中,结构体不支持继承。Go语言没有类的概念,因此结构体之间不能像面向对象语言中的类继承一样进行继承。

相反,Go语言中的结构体可以通过在一个结构体中嵌入另一个结构体来实现类似继承的效果,这被称为结构体嵌入或匿名字段。

以下是一个示例,展示了如何使用结构体嵌入来模拟继承的效果:

go
import (
	"encoding/json"
	"fmt"
)

type SteamData struct {
	Level        int32 `protobuf:"varint,1,opt,name=level,proto3" json:"level,omitempty"`
	CreatedYears int32 `protobuf:"varint,2,opt,name=created_years,json=createdYears,proto3" json:"created_years,omitempty"`
	PlayedHours  int32 `protobuf:"varint,3,opt,name=played_hours,json=playedHours,proto3" json:"played_hours,omitempty"`
	GameCount    int32 `protobuf:"varint,4,opt,name=game_count,json=gameCount,proto3" json:"game_count,omitempty"`
}

type GameUrl struct {
	// 定义GameUrl结构体的字段
}

type GameUrl2HoursMap struct {
	// 定义GameUrl2HoursMap结构体的字段
}

type SteamInfo struct {
	SteamData
	GameUrls []GameUrl         `json:"game_urls"`
	GameMap  GameUrl2HoursMap  `json:"game_map"`
}

func main() {
	// 创建一个SteamInfo对象
	info := SteamInfo{
		SteamData: SteamData{
			Level:        10,
			CreatedYears: 3,
			PlayedHours:  100,
			GameCount:    5,
		},
		// 设置其他字段的值
	}

	// 将对象序列化为JSON字符串
	serializedData, err := json.Marshal(info)
	if err != nil {
		fmt.Println("序列化失败:", err)
		return
	}

	fmt.Println(string(serializedData))
}

在上述示例中,SteamInfo结构体通过使用结构体嵌入的方式将SteamData结构体嵌入其中。这意味着SteamInfo结构体继承了SteamData结构体的字段和方法。

输出的JSON字符串将具有以下格式:

json
{
  "level": 10,
  "created_years": 3,
  "played_hours": 100,
  "game_count": 5,
  "game_urls": [],
  "game_map": {}
}

请注意,结构体嵌入的字段在JSON序列化时会直接展开在外层结构体中,而不会形成嵌套的结构。

标签:嵌入,SteamInfo,game,json,go,SteamData,结构
From: https://www.cnblogs.com/zhanchenjin/p/17611116.html

相关文章

  • 嵌入式技术与PLC到底有什么关系?
    1、嵌入式技术和PLC都是用于实现自动化控制的技术。嵌入式技术和PLC都是现代自动化领域中常用的技术,它们都能够对外界输入信号进行实时处理,并控制相应的输出信号,实现自动化控制,也就是说,你想造机器的话,用任何一种都是可行的。2、嵌入式技术可以嵌入到各种设备或系统中,包括PLC中。......
  • go 执行shell命令
    简单案例packagemainimport( "context" "fmt" "os/exec")var( ctx=context.Background())funcmain(){ cmd:=exec.CommandContext(ctx,"ip","a") res,err:=cmd.Output() iferr!=nil{ panic......
  • go项目部署到服务器上
    生成linux可执行文件main。首先再windowscmd平台下生成linux可执行的文件在cmd或者powershell执行以下命令setGOARCH=amd64goenv-wGOARCH=amd64setGOOS=linuxgoenv-wGOOS=linux然后到main.go所在的目录下,正常gobuild即可gobuildmain.go如果想要再切换回w......
  • 比较 Java Enterprise Architecture 中的 MongoDB 和 Couchbase
    MongoDB和Couchbase是两种常用的NoSQL数据库,用于在Java实现的企业架构中存储和管理数据。以下是它们之间的主要差异、比较和权衡。在当今快速发展的企业架构领域,MongoDB和Couchbase已经成为NoSQL数据库中两个重要的竞争者。本文全面探讨了这两个强大解决方案之间的关键差异、比较和......
  • 王道408--数据结构--用数组实现二叉树--并查集及其优化代码
    一、数组实现二叉树(下标从0开始)#include<stdio.h>typedefstruct_TreeNode{intdata;boolIsEmpty;//结点是否为空//因为我们的二叉树不一定是满二叉树,中间可能有一些节点不存在//值为1代表空}TreeNode;//初始化voidInitTreeNode(TreeNodet[......
  • Mongodb主从复制分片群集
    推荐步骤:1.在centos05-centos07上安装mongodb,配置主从复制和分片群集,centos05到centos07添加分片sh1分片群集2.在centos08-centos10上安装mongodb,配置主从复制和分片群集,centos08到centos10添加到分片sh2分片群集3.在centos01到centos03安装mongodb配置为配置节点4.配置分片功能实......
  • 【LGR-148-Div.3】洛谷基础赛 #1 & MGOI Round I
    【LGR-148-Div.3】洛谷基础赛#1&MGOIRoundIT1luoguP9502『MGOI』SimpleRoundI|A.魔法数字\(100pts\)水题,场切了。#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#definesortstable_sort#defineendl'\n'intmain(){ ......
  • Linux:目录结构——各个目录的作用
    学习自:Linux目录详解-sjmas-博客园Linux目录结构详解_永远是少年啊的博客-CSDN博客Linux根目录结构目录及说明上文目录1->目录2的含义是,目录1是目录2的软链接。目录说明bin单用户下可以操作的命令。它是/usr/bin的软链接。boot存放开机所需文件,......
  • 『MGOI』Simple Round I | B. 魔法照相馆 题解
    题目传送门一道模拟题。并不复杂的模拟题,也不需要用到贪心。我们可以创建一个数组来记录每个幕布是否被拉上,统计答案的时候,就看看这块幕布前面有多少个没拉上的,最后如果这块幕布拉上了,就重新放下来就行了。#include<bits/stdc++.h>#definelllonglong#defineINF1e9usi......
  • post请求,go源码会把“+”字符转成了空格导致的验签失败问题
    问题描述:安卓7.29的包客户端书城男女图书页面显示异常,冷启动、下拉刷新等都无法恢复,个别用户清除缓存数据后恢复。(说明:安卓从72880开始的包,客户端书城接口升级为v7:/api/v7/book-store,post请求) 问题原因:线上书城男女图书v7接口part1的post接口请求,个别手机出现401验签失败。......