国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

為什么 Go 官方 Protobuf 不支持標(biāo)簽注入?有替代方案 ?

開發(fā) 前端
在 Go 生態(tài)系統(tǒng)中,gogo/protobuf?曾是官方?golang/protobuf?的強(qiáng)力替代方案,提供了許多增強(qiáng)功能。然而這個(gè)項(xiàng)目已在兩年前被標(biāo)記為廢棄(Deprecated),作者最終放棄了維護(hù)。

背景:gogo/protobuf 的興衰

在 Go 生態(tài)系統(tǒng)中,gogo/protobuf 曾是官方 golang/protobuf 的強(qiáng)力替代方案,提供了許多增強(qiáng)功能。然而這個(gè)項(xiàng)目已在兩年前被標(biāo)記為廢棄(Deprecated),作者最終放棄了維護(hù)。

其中最讓作者和社區(qū)失望的,是官方 Protobuf 庫始終拒絕支持的一個(gè)關(guān)鍵功能——標(biāo)簽注入。這一功能正是許多開發(fā)者選擇 gogo/protobuf 的主要原因。

什么是標(biāo)簽注入功能?

標(biāo)簽注入允許開發(fā)者在 .proto 文件中直接定義生成 Go 結(jié)構(gòu)體時(shí)的字段標(biāo)簽(如 JSON tag)。這是 gogo/protobuf 擴(kuò)展的核心功能之一。

功能示例

考慮以下 Protobuf 定義:

message Person {
    string name =1;
    int32 id =2[(gogoproto.jsontag)="id"];// 自定義JSON標(biāo)簽
    string email =3;

    enum PhoneType{
        MOBILE =0;
        HOME =1;
        WORK =2;
    }

    message PhoneNumber{
        string number =1;
        PhoneType type =2;
    }

    repeated PhoneNumber phones =4;
    google.protobuf.Timestamp last_updated =5;
}

使用 gogo/protobuf 生成的 Go 代碼:

type Person struct{
     Name        string`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
     Id          int32`protobuf:"varint,2,opt,name=id,proto3" json:"id"`// 注意沒有omitempty
     Email       string`protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
     Phones      []*Person_PhoneNumber  `protobuf:"bytes,4,rep,name=phones,proto3" json:"phones,omitempty"`
     LastUpdated *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_updated,jsnotallow=lastUpdated,proto3" json:"last_updated,omitempty"`
}

可以看到 Id 字段的 JSON tag 被自定義為 "id",并且移除了 omitempty 標(biāo)簽,這在某些 API 設(shè)計(jì)中非常有用。

官方為何拒絕支持?

盡管社區(qū)強(qiáng)烈要求,golang/protobuf 團(tuán)隊(duì)始終明確拒絕添加這一功能。主要原因包括:

  1. 語言中立性原則:官方 Protobuf 實(shí)現(xiàn)旨在不與特定編程語言強(qiáng)綁定。標(biāo)簽注入是 Go 特有的需求,其他語言可能無法有效利用這一特性。
  2. 維護(hù)邊界:官方認(rèn)為這類功能超出了核心 Protobuf 庫的職責(zé)范圍,更適合由第三方插件或工具實(shí)現(xiàn)。
  3. 設(shè)計(jì)哲學(xué):官方更傾向于保持核心庫的簡(jiǎn)潔性和穩(wěn)定性,而非不斷增加語言特定的擴(kuò)展。

替代方案推薦

雖然 gogo/protobuf 已廢棄,但仍有其他選擇:

1. 繼續(xù)使用 gogo/protobuf

盡管不再維護(hù),但對(duì)于已有項(xiàng)目仍可繼續(xù)使用。

2. 使用 protoc-go-inject-tag

這是一個(gè)專門用于標(biāo)簽注入的工具,職責(zé)單一且維護(hù)良好。

示例使用:

message IP{
    // @gotags: valid:"ip"
    string Address =1;

    string MAC =2;// @gotags: validate:"omitempty"
}

生成代碼:

type IP struct{
     Address string`protobuf:"bytes,1,opt,name=Address" json:"Address,omitempty" valid:"ip"`
     MAC     string`protobuf:"bytes,2,opt,name=MAC" json:"MAC,omitempty" validate:"omitempty"`
}

總結(jié)與啟示

  1. 官方立場(chǎng)明確:golang/protobuf 堅(jiān)持語言中立原則,不愿支持 Go 特有功能
  2. 生態(tài)多樣性:社區(qū)需求催生了 gogo/protobuf 等替代方案,填補(bǔ)了官方庫的空白
  3. 維護(hù)可持續(xù)性:?jiǎn)我宦氊?zé)的工具如 protoc-go-inject-tag 可能比龐大的一站式方案更易維護(hù)
  4. 技術(shù)決策權(quán)衡:在選擇 Protobuf 工具鏈時(shí),需在功能豐富性和長(zhǎng)期維護(hù)性間取得平衡

這一案例也反映了開源生態(tài)中常見的情況:官方項(xiàng)目保持克制,而社區(qū)填補(bǔ)特定需求。開發(fā)者需要根據(jù)項(xiàng)目需求做出合適的技術(shù)選擇。

責(zé)任編輯:武曉燕 來源: Go語言圈
相關(guān)推薦

2025-06-26 02:22:00

GoProtobuf標(biāo)簽

2024-05-28 08:55:52

2021-10-27 07:15:36

Go 循環(huán)引用

2021-12-09 10:51:47

Go繼承

2021-12-15 07:49:22

Go語言設(shè)計(jì)

2023-01-28 08:05:32

轉(zhuǎn)換Go泛型

2024-01-01 08:10:40

Go語言map

2024-01-05 08:45:35

Go語言map

2021-11-08 11:02:01

Go函數(shù)重載

2023-02-26 23:36:08

PHPGo函數(shù)

2024-03-08 08:51:59

Gomain函數(shù)

2020-10-09 06:48:19

Pythonswitch語句

2020-07-22 08:01:41

Python開發(fā)運(yùn)算符

2024-03-12 09:13:28

Go語言main

2021-02-01 13:53:53

StringlongJava

2009-03-12 08:42:38

AndroidWMMTK

2021-08-02 09:31:20

Python工具代碼

2021-06-11 00:03:31

鴻蒙智能手機(jī)

2021-07-13 08:09:34

微博推特評(píng)論

2023-04-03 11:21:29

PythonGoRust
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

免费在线观看亚洲视频| 欧美日韩视频免费| 亚洲一区精品在线| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲电影成人av99爱色| 国产欧美综合精品一区二区| 亚洲欧美日本伦理| xvideos国产精品| 少妇性bbb搡bbb爽爽爽欧美| 91日本在线视频| 九色porny自拍视频在线播放| 99视频在线免费| 中文字幕一区二区三区精华液 | 亚洲人成人99网站| 亚洲一区bb| 国产精品自在| 中文av一区二区| 日韩电影免费观看在线观看| 大地资源中文在线观看免费版| 国产精品色一区二区三区| 国产手机免费视频| 久久er热在这里只有精品66| 国产成人h网站| 亚洲一区二区三区午夜| 欧美成人亚洲| 亚洲国产成人在线播放| 免费a在线观看| 欧美午夜片在线看| 先锋影音成人资源| 国产精品欧美久久久久无广告 | 欧美亚洲日本国产| 欧美大黄免费观看| 日韩av黄色在线观看| 日本精品免费视频| 精品无人区麻豆乱码久久久| 欧洲亚洲精品视频| 99久久er热在这里只有精品66| 一区二区三区韩国| 国产一区二区三区久久悠悠色av| 欧美激情二区三区| 69视频在线免费观看| 日本一区二区三区国色天香 | 久久精品在这里| 天天综合网久久| 中文字幕精品综合| 中文字幕av高清在线观看| 亚洲一区二区在线视频| av高清日电影| 免费观看一级特黄欧美大片| 欧美一区二区福利| 99久久国产综合色|国产精品| 国产特级淫片高清视频| 亚洲欧洲一区二区在线播放| 成人激情黄色网| 性欧美xxxx大乳国产app| 欧美亚洲黄色片| 亚洲精品一区二区妖精| 色综合天天综合在线视频| 亚洲免费观看| 国产亚洲一区二区三区四区| 无码人妻h动漫| 亚洲欧洲精品一区二区三区不卡| 日韩精品一区二区三区丰满| 欧美日韩精品欧美日韩精品一 | 91久热免费在线视频| 亚洲乱码免费伦视频| 国产精品一区二区欧美黑人喷潮水| 国外av网站| 亚洲精品高清在线| 日韩国产高清一区| 国产不卡在线视频| 奇米影音第四色| 亚洲欧美在线视频观看| 成人影院在线看| 欧美日韩视频| 欧美另类69精品久久久久9999| 国产美女亚洲精品7777| 国产中文日韩欧美| 秋霞电影网一区二区| 三上悠亚在线资源| 欧美日韩中文国产| 成人影院中文字幕| 国产精品免费人成网站| 污黄网站在线观看| 国产福利一区二区三区视频在线| 亚洲精品一区二区三区蜜桃久| 色天使久久综合网天天| 在线观看不卡av| 精品一区二区三区在线观看视频| 亚洲v日韩v综合v精品v| 男人天堂欧美日韩| 国产精品xxxxx| 国产日产高清欧美一区二区三区| 国产又粗又大又爽的视频| 中文字幕一区二区三区蜜月| 91九色国产在线播放| 午夜精品成人在线视频| 校园春色亚洲色图| 国产精品直播网红| 粉嫩av一区二区三区在线播放| 小水嫩精品福利视频导航| 日韩国产高清污视频在线观看| 鲁大师成人一区二区三区 | 小泽玛利亚视频在线观看| 中文字幕 久热精品 视频在线 | 九九99久久精品在免费线bt| 久久久久欧美| 亚洲图片88| 日韩一区二区三区视频在线观看| 日本国产精品| 免费看日本毛片| 欧美日韩黄色一区二区| 国产色噜噜噜91在线精品| 亚洲高清精品中出| 国产亚洲欧美一级| 日本三级视频在线观看| 欧美亚洲另类激情另类| 国产91欧美| 亚洲欧美一区二区三区情侣bbw| 国产一区二区三区站长工具| 伊人色综合久久天天五月婷| 欧美性黄网官网| 88久久精品| 大地资源网在线观看免费官网| 欧美日韩免费在线观看| 亚洲男人都懂的网站| 中文欧美在线视频| 亚洲黄色大片| 男女激情网站| 久久精品视频网站| 一本色道久久| 久久亚洲天堂| 久久理论片午夜琪琪电影网| 日韩中文字幕高清在线观看| 国产精品视频资源| 国产美女主播视频一区| 日韩在线播放av| 国产精品一级| 亚洲a一区二区三区| 国产黄色影视| 国产精品高潮呻吟视频| 国产区高清在线| 亚洲色图二区| 特黄国产免费播放| www..com久久爱| jiyouzz国产精品久久| 欧美日韩亚洲一二三| 国产一区二区三区精品久久久| 亚洲精品字幕| 黄色av免费在线看| 成人精品在线视频| 国产不卡在线播放| 成人国产精品| 老子影院午夜伦不卡大全| 俺去啦;欧美日韩| 成人av动漫在线| 欧美日韩精品一区二区三区在线观看| 中文字幕无码精品亚洲35| 国产精品久久毛片a| 亚洲成人激情社区| 波多野结衣激情| 亚洲天堂开心观看| 老司机午夜免费精品视频| 国产综合在线观看| 亚洲综合在线做性| 精品999在线观看| 欧美日韩精品三区| 综合国产视频| 国产精品视频26uuu| 日韩成人在线免费观看| 99精品久久只有精品| 精品免费久久久久久久| 欧美激情国产高清| 欧美精品一二三| 久久精品国产亚洲精品2020| 亚洲人成网站影音先锋播放| 日韩dvd碟片| 欧美videossex| 污导航在线观看| 欧美福利视频| 国产99久久| 国产午夜在线视频| av网站在线免费播放| 国产色综合天天综合网| 午夜视频一区二区三区| 综合国产在线| 成人av免费| 久久国产精品视频在线观看| 久久久久久国产| 亚洲人成在线观看一区二区| 成人羞羞网站入口免费| 日本天码aⅴ片在线电影网站| 国产高清不卡无码视频| 97视频网站入口| 欧美在线观看你懂的| 蜜桃精品视频在线| 国产成人精品亚洲线观看| 国产三级在线免费观看| 宅男噜噜99国产精品观看免费| 久久久电影免费观看完整版|