Go实现String方法

给结构体实现String() sting方法,方便按照我们想看的方式打印出来fmt.Println(),类似与python的__str____repr__

package main_test

import (
	"fmt"
	"github.com/bytedance/sonic"
	"testing"
)

type A struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

func (a A) String() string {
	s, err := sonic.MarshalString(a)
	if err != nil {
		panic(err)
	}
	return s
}
func TestAbc(t *testing.T) {
	a := &A{
		Username: "abc",
		Password: "aaa",
	}
	fmt.Println(a)
}
/*
{"username":"abc","password":"aaa"}
*/

当引用项为结构体,同时希望上层结构体直接继承下层结构体属性

例子

第一个结构体

type RequestCreateBlog struct {
	Title   string `json:"title"`
	Author  string `json:"author"`
	Summary string `json:"summary"`
	Content string `json:"content"`
	Status  int8 `json:"status"`
}

第二个结构体

type Blog struct {
	Id         int   `json:"id"`
	CreatedAt  int64 `json:"created_at"`
	UpdatedAt  int64 `json:"updated_at"`
	PulishedAt int64 `json:"pulished_at"`
	*RequestCreateBlog
}

这里的需求是,第二个结构体直接继承第一个结构体的所有属性,这里使用了指针的方式

所要达到的序列化之后的结构体是这样的:

type Blog struct {
	Id         int   `json:"id"`
	CreatedAt  int64 `json:"created_at"`
	UpdatedAt  int64 `json:"updated_at"`
	PulishedAt int64 `json:"pulished_at"`
	Title   string `json:"title"`
	Author  string `json:"author"`
	Summary string `json:"summary"`
	Content string `json:"content"`
	Status  int8 `json:"status"`
}

//而不是这样的
type Blog struct {
	Id         int   `json:"id"`
	CreatedAt  int64 `json:"created_at"`
	UpdatedAt  int64 `json:"updated_at"`
	PulishedAt int64 `json:"pulished_at"`
	RequestCreateBlog *RequestCreateBlog
}

这个时候需要实现的方法就不再是给第一个结构体实现String()

这里就是实现Blog结构体的String()方法

func (b *Blog) String() string {
	b1, err := sonic.Marshal(b)
	if err != nil {
		painc(err.Error())
	}
	return string(b1)
}
posted @   厚礼蝎  阅读(156)  评论(0编辑  收藏  举报
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示