精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go語言的“靈魂拷問”:接口只關乎行為,還是也應擁抱數(shù)據(jù)?

開發(fā) 前端
泛型約束 interface{ int | float64 }? 允許在函數(shù)內使用 +? 操作符,正是因為它約束了類型集內的所有類型都支持 +? 這個“行為”。同理,interface{ X int }? 也可以被理解為約束了所有類型都支持 .X 這個“操作”。

在 Go 語言的世界里,接口(interface)一直被視為其設計哲學的基石之一——它只關心一個類型能做什么(行為),而不關心它是什么(結構)。這種基于方法集的鴨子類型,賦予了 Go 獨一無二的靈活性和解耦能力。然而,隨著 Go 1.18 泛型的到來,一個深刻的問題被擺上了臺面:當我們需要編寫對數(shù)據(jù)的結構而非行為具有通用性的代碼時,現(xiàn)有的約束機制是否足夠?

GitHub 上的 Issue #51259,“proposal: spec: support for struct members in interface/constraint syntax”,正是這場“靈魂拷問”的中心。它提出的一個看似簡單的想法——讓接口能夠描述結構體字段——卻引發(fā)了一場關于 Go 語言核心哲學的深度辯論:我們是應該堅守“行為至上”的純粹性,還是應該擁抱一個更務實的、能感知數(shù)據(jù)結構的泛型系統(tǒng)?

在這篇文章中,我就和大家一起來看看Go社區(qū)和Go團隊關注這個提案的討論過程,以及基于當前現(xiàn)狀的臨時決議。

問題的根源:當泛型遇到結構

想象一下這個常見的場景:你需要編寫一個通用的函數(shù),來處理一組具有共同字段的結構體,比如各種類型的 Kubernetes 資源,它們都內嵌了 metav1.ObjectMeta 和 metav1.TypeMeta。或者,在圖形學應用中,你需要處理多種都包含 X、Y 字段的 Point 結構。

在 Go 1.18 之后,我們很自然地會想到使用類型聯(lián)合(union)來約束泛型函數(shù):

type Point2D struct { X, Y float64 }
type Point3D struct { X, Y, Z float64 }

// 期望的寫法
func Distance[T Point2D | Point3D](p T) float64 {
   // 編譯失敗!
   // p.X undefined (type T has no field or method X)
   return math.Sqrt(p.X*p.X + p.Y*p.Y) 
}

然而,編譯器無情地拒絕了我們。原因在于,Go 的泛型約束規(guī)定,對類型參數(shù)的操作,必須是其類型集合中所有類型都明確支持的。對于一個類型聯(lián)合,其“共同能力”僅限于所有成員都實現(xiàn)的方法集,而不包括共同的字段。

為了繞過這個限制,目前唯一的辦法是回歸到 Go 的傳統(tǒng)強項:行為接口。開發(fā)者被迫為每個結構體編寫瑣碎的 getter/setter 方法,僅僅是為了讓它們滿足同一個行為接口,從而能在泛型函數(shù)中使用,但這恰恰是“樣板代碼”的來源:

import "math"

// 原始結構體
type Point2D struct{ X, Y float64 }
type Point3D struct{ X, Y, Z float64 }

// 1. 定義一個行為接口來描述“獲取坐標”的行為
type Point interface {
 X() float64
 Y() float64
}

// 2. 為每個結構體實現(xiàn)接口(這部分就是樣板代碼)
func (p Point2D) X() float64 { return p.X }
func (p Point2D) Y() float64 { return p.Y }

func (p Point3D) X() float64 { return p.X }
func (p Point3D) Y() float64 { return p.Y }

// 3. 現(xiàn)在,泛型函數(shù)可以基于行為接口工作了
func Distance[T Point](p T) float64 {
// 通過方法調用,而非字段訪問
return math.Sqrt(p.X()*p.X() + p.Y()*p.Y())
}

上面的代碼現(xiàn)在可以編譯通過了,但代價是什么?我們被迫編寫了四個極其瑣碎的、僅僅是 return p.FieldName 的 getter 方法。這些方法沒有增加任何新的業(yè)務邏輯,它們存在的唯一目的,就是為了滿足類型系統(tǒng)的約束。如果還需要修改字段,我們還得再為每個結構體編寫 SetX、SetY 等 setter 方法。

當需要約束的字段增多,或者涉及的結構體類型增加時,這種樣板代碼會呈爆炸式增長。這正是這場“靈魂拷問”的開端:為了形式上的“行為”,我們是否犧牲了實質上的簡潔與直觀?我們是否應該有一種更直接的方式,來表達對結構的約束?

提案的核心:讓接口描述“數(shù)據(jù)契約”

為了擺脫這種繁瑣的 “getter 樣板代碼” 困境,提案者提出了一個大膽而直觀的想法:將對結構的要求,直接提升為接口的一部分,讓接口能夠描述一種“數(shù)據(jù)契約”。

// 提案中的核心語法
type TwoDimensional interface {
    X, Y int
}
    
// 泛型函數(shù)現(xiàn)在可以直接訪問由約束保證存在的字段
func TwoDimensionOperation[T TwoDimensional](value T) int { 
return value.X * value.Y // 合法!
}

type Point2D struct{ X, Y int }
type Point3D struct{ X, Y, Z int }

var p2 Point2D
var p3 Point3D
TwoDimensionOperation(p2) // 編譯通過
TwoDimensionOperation(p3) // 編譯通過

這個提議的精妙之處在于,它并沒有發(fā)明一個全新的概念,而是將我們之前被迫用 行為 (getter 方法) 模擬的 結構 約束,變成了一種一等公民。它精準地回答了一個問題:如果我們只是想要訪問一個字段,為什么必須強制類型去實現(xiàn)一個方法呢?為什么不能直接在約束中聲明我們對“數(shù)據(jù)契約”的要求?

一位參與討論的 Gopher 對此給出了一個絕佳的類比,清晰地闡述了這種思想上的轉變:

“In the same way that type XGetter interface { GetX() int } represents the set of types that implement the method GetX() int, Xer would be the set of types that have a member X.” (就像 XGetter 接口代表了所有實現(xiàn)了 GetX() int 方法的類型集合一樣,Xer 接口將代表所有擁有字段 X 的類型集合。)

這種轉變不僅是語法的簡化,更是思維模式的飛躍。它允許我們從“要求一個 GetX() 的行為”,轉變?yōu)楦苯拥摹耙笠粋€ X 字段的存在”。這不僅解決了樣板代碼的問題,還帶來了潛在的性能優(yōu)勢:編譯器可以直接生成字段訪問指令,而無需像方法調用那樣進行動態(tài)派發(fā)(dynamic dispatch)。

激烈的辯論:行為 vs. 結構

這個提案立即引發(fā)了社區(qū)的深度討論,核心的爭議點在于它是否動搖了 Go 接口的哲學根基。

反對的聲音:“接口應該只關乎行為”

一些Go社區(qū)成員的觀點認為,這是對 Go 接口核心理念的背離:

“It seems to shift the emphasis of interfaces from behavior to data... a mechanism for focusing on what a type can do, rather that what a type is composed of.” (這似乎將接口的重點從行為轉移到了數(shù)據(jù)……接口是一個專注于類型能做什么,而非由什么組成的機制。)

這種觀點認為,字段是數(shù)據(jù)(data)或結構(structure),而方法是行為(behavior)。一旦接口開始描述數(shù)據(jù),Go 就可能失去其設計上的純粹性,向更復雜的、基于結構繼承的語言靠攏。

支持的聲音:“字段也是一種操作” & “泛型改變了游戲規(guī)則”

另一方則認為,這種“行為 vs. 結構”的二元對立在泛型時代已經(jīng)過時。Go 核心團隊的 ianlancetaylor 提供了一個全新的視角:

“If you view field access as an operation on a type, in the same sense that + is an operation on a type, then it does make sense.” (如果你將字段訪問視為一種類型上的操作,就像 + 是一種操作一樣,那么這就說得通了。)

泛型約束 interface{ int | float64 } 允許在函數(shù)內使用 + 操作符,正是因為它約束了類型集內的所有類型都支持 + 這個“行為”。同理,interface{ X int } 也可以被理解為約束了所有類型都支持 .X 這個“操作”。

此外,支持者認為,Go 1.18 引入的類型聯(lián)合本身,就已經(jīng)讓接口開始描述“是什么”(具體的類型集合),而不僅僅是“能做什么”了。因此,允許接口描述結構,只是這一演進方向上合乎邏輯的下一步。

深層挑戰(zhàn):可寫性、嵌入與接口值

除了哲學辯論,討論還深入到了一些棘手的技術細節(jié):

  • 字段的可寫性(Addressability): 如果一個泛型函數(shù)可以修改字段 (point.X = 1.0),當傳入一個非指針的結構體值時,修改應該只發(fā)生在函數(shù)內部的副本上。但如果傳入的是一個接口值,其底層動態(tài)值的可寫性如何保證?這引出了關于“可寫字段”約束的復雜討論,例如用 *Y int 語法來表示可寫字段。
  • 嵌入字段(Embedded Fields): 如何在接口中表達一個類型必須“嵌入”另一個類型,而不僅僅是擁有其所有字段?這涉及到類型布局和方法提升等更深層次的語義,目前尚無完美的解決方案。
  • 接口值化: ianlancetaylor 明確指出,任何被接受的約束提案,都應該有潛力在未來演進為可被實例化的普通接口類型。一個只能作為約束存在的“半成品”接口,會給語言增加不必要的復雜性。

結論:一個被擱置但遠未結束的探索

最終,由于其巨大的復雜性和對語言核心概念的深遠影響,Go 團隊決定將此提案擱置(On Hold),以便在社區(qū)對 Go 1.18 泛型有了更充分的實踐和理解后再做定奪。

然而,這場辯論的價值遠超提案本身。它強迫我們重新思考 Go 語言的核心概念在泛型時代下的新內涵。它揭示了在 Kubernetes API 操作、數(shù)據(jù)庫 ORM、圖形學庫等真實世界場景中,對“結構化泛型”的迫切需求。

雖然我們短期內不會看到 interface{ X int } 這樣的語法,但這場討論已經(jīng)播下了種子。它可能會在未來以某種形式回歸,或許是更完善的接口語法。Issue #51259 的開放狀態(tài),本身就代表著一種承諾:關于 Go 語言靈魂的探索,遠未結束。

責任編輯:武曉燕 來源: TonyBai
相關推薦

2021-02-23 08:58:13

Go語言變量

2020-06-02 07:44:04

AQS JavaNode

2021-02-24 10:01:05

機器學習人工智能計算機

2025-10-29 16:29:27

OpenAIGPT-2模型

2022-05-30 18:37:03

數(shù)據(jù)個人信息人工智能

2019-11-19 10:32:55

Java語言程序員

2022-12-12 08:46:11

2020-05-22 08:13:45

敏捷開發(fā)OKR

2019-08-12 11:14:00

JVM垃圾對象

2020-05-29 11:48:01

安全運維信息安全網(wǎng)絡安全

2025-05-19 17:18:57

AI模型o3

2022-08-26 01:10:32

TCPSYNLinux

2022-03-16 18:27:39

開發(fā)低代碼軟件開發(fā)

2019-08-01 10:20:10

2021-03-05 14:58:34

比特幣區(qū)塊鏈挖礦

2021-05-26 05:22:48

SQL 數(shù)據(jù)庫SELECT

2023-06-16 14:10:00

TCPUDP網(wǎng)絡通信

2020-11-24 09:50:22

大數(shù)據(jù)語言go

2021-03-12 09:24:58

Redis面試場景

2021-06-02 09:47:48

RSA2021
點贊
收藏

51CTO技術棧公眾號

蜜臀久久99精品久久久久久宅男 | 蜜桃久久精品成人无码av| 成人影院av| 亚洲特黄一级片| 久草精品电影| 国产ts变态重口人妖hd| 国产精品日本欧美一区二区三区| 色噜噜久久综合伊人一本| zjzjzjzjzj亚洲女人| 欧美国产大片| 一区二区三区在线高清| 日产国产精品精品a∨| 国产毛片在线视频| 日韩电影在线一区二区三区| 久久99亚洲热视| 国产三级在线观看完整版| 风间由美中文字幕在线看视频国产欧美| 在线观看三级视频欧美| 日韩日韩日韩日韩日韩| 国产一区久久精品| 欧美精彩视频一区二区三区| 国产亚洲福利社区| 99在线精品视频免费观看20| 日本亚洲欧美天堂免费| 91精品国产99久久久久久| 18岁成人毛片| 婷婷久久国产对白刺激五月99| 日韩精品一区二区三区第95| 美女又黄又免费的视频| 亚洲国产aⅴ精品一区二区三区| 色综合一个色综合亚洲| 久久久久99精品成人片| а√天堂官网中文在线| 国产精品久久久久aaaa| 日韩久久久久久久| 酒色婷婷桃色成人免费av网| 国产一区二区三区免费| 国产美女91呻吟求| 波多野结衣一区二区在线| 亚洲激情影院| 欧美大秀在线观看| 精品肉丝脚一区二区三区| 亚洲澳门在线| 日韩一区二区久久久| www久久久久久久| 精品久久国产| 国产亚洲精品久久久优势| 无套内谢大学处破女www小说| gogo人体一区| 精品播放一区二区| 麻豆精品国产传媒av| 999精品视频在这里| 日韩免费视频线观看| 欧美在线a视频| 国产精品美女久久久久| 欧美一区二区三区婷婷月色 | 亚洲国产91视频| 欧美老年两性高潮| 成人在线短视频| 91九色鹿精品国产综合久久香蕉| 精品少妇一区二区三区日产乱码| 久久无码专区国产精品s| 福利在线一区| 日韩精品免费电影| 无码一区二区三区在线| 经典一区二区| 北条麻妃一区二区三区中文字幕| 小早川怜子一区二区的演员表| 先锋资源久久| 久久久久久久久久久免费精品| 国产无套内射又大又猛又粗又爽| 亚洲三级观看| 热久久视久久精品18亚洲精品| 一二三区免费视频| 精品一区中文字幕| 草莓视频一区| 久久久pmvav| 中文字幕一区二区三| av动漫在线播放| 欧美男男激情videos| 日本乱码高清不卡字幕| 国产又黄又猛的视频| 哺乳一区二区三区中文视频| 亚洲女人天堂视频| www.毛片com| 国产麻豆综合| 成人国产精品免费视频| 黄色一级大片在线免费看国产| 久久色在线观看| 欧美性视频在线播放| 99热精品免费| 黄色网址在线播放| 中文字幕在线不卡一区二区三区| 四虎永久免费网站| 在线视频cao| 欧美高清视频在线高清观看mv色露露十八 | 中文字幕一区三区久久女搜查官| 视频一区在线观看| 久久69精品久久久久久国产越南| 日韩在线播放中文字幕| 国产老肥熟一区二区三区| 久久香蕉综合色| 中文国产字幕在线观看| 欧美性色xo影院| 日韩精品xxx| 成人亚洲一区| 欧美激情小视频| 在线免费看91| 久久久国产一区二区三区四区小说| 青青草综合视频| 国产成人精品一区二区三区视频 | 亚洲一区国产| 7777精品久久久大香线蕉小说| 黄色小视频在线免费观看| 亚洲伊人伊色伊影伊综合网| 波多野结衣xxxx| 午夜欧洲一区| 国产+成+人+亚洲欧洲| 国产伦精品一区二区三区免.费 | 色吧亚洲视频| 性欧美又大又长又硬| 日韩欧美久久一区| 国产又色又爽又高潮免费| 国产情侣一区| 国产区日韩欧美| 1769免费视频在线观看| 欧美日韩和欧美的一区二区| 香蕉视频黄色在线观看| 亚洲黄色影院| 99精品欧美一区二区三区| 日本天堂在线观看| 欧美视频在线一区| 国产传媒国产传媒| 久久久成人网| 六十路精品视频| 欧美激情20| 国产视频精品在线| 久草视频在线观| 波多野结衣在线一区| 久久亚洲国产成人精品无码区| 精品一区二区三区中文字幕视频| 日韩亚洲一区二区| 国产一区二区自拍视频| 国产精品女上位| 亚洲一区二区三区观看| 欧美h版在线| 国产一区二区在线免费视频| av在线免费一区| 欧美午夜不卡在线观看免费| 亚洲黄色小说视频| 久久一区国产| 日韩一区二区三区资源| 成人1区2区| 中文字幕日韩精品在线| 一级黄色大片免费| 亚洲欧美日韩一区二区 | jazzjazz国产精品麻豆| 国内精品一区二区三区| 婷婷综合激情网| 欧美日韩在线影院| 久久婷婷五月综合| 久久99精品久久久久| a级网站在线观看| 亚洲性视频在线| 久久免费精品日本久久中文字幕| 日韩在线观看视频一区二区三区| 精品美女久久久久久免费| 人妻熟女aⅴ一区二区三区汇编| 首页国产欧美久久| 中文字幕剧情在线观看一区| 精品中文字幕一区二区三区| 久久久久久久久久婷婷| 日本免费一区二区三区最新| 欧美日韩中文字幕一区| 久久国产高清视频| 波多野结衣中文一区| 国产成人无码一二三区视频| 日韩在线理论| 懂色中文一区二区三区在线视频| 蜜桃av在线播放| 中国日韩欧美久久久久久久久| 99精品久久久久久中文字幕 | 蜜臀av色欲a片无码精品一区| 亚洲三级精品| 国产又爽又黄的激情精品视频| 天堂av在线电影| 亚洲人成人99网站| av在线资源观看| 疯狂做受xxxx高潮欧美日本| 欧美性猛交xxxx乱大交少妇| 国产成人免费视频| 亚洲色图38p| 欧美日韩亚洲一区二区三区在线| 麻豆成人av| 久久丁香四色| 国产精品高潮呻吟久久av野狼| www.久久ai| 亚洲日本中文字幕免费在线不卡| 国产免费高清av| 色偷偷久久人人79超碰人人澡| 久久久久久视频| 国产亚洲成av人在线观看导航| 日韩在线不卡一区| 久久黄色网页| 91动漫在线看| 久久久久久久久久久妇女 | 一区二区三区网站| 欧美一区二区视频17c| 2020国产精品极品色在线观看| 国产精品久久久久久久久久免费| 超碰在线网站| 久热国产精品视频| 草碰在线视频| 亚洲乱码国产乱码精品精天堂| 精品人妻一区二区三区麻豆91| 欧美日韩综合在线免费观看| 7799精品视频天天看| 亚洲高清视频在线| 91杏吧porn蝌蚪| 国产精品免费免费| 性猛交ⅹxxx富婆video| 91丨porny丨在线| 免费看三级黄色片| 国产专区欧美精品| 国内外成人激情视频| 在线成人黄色| 97在线免费视频观看| 91超碰成人| 亚洲一区二区三区精品在线观看| 伊人久久大香线蕉综合网蜜芽| 亚洲综合日韩中文字幕v在线| 日本免费久久| …久久精品99久久香蕉国产| 国产网红女主播精品视频| 免费av一区二区| 国产激情在线| 久久精品91久久香蕉加勒比| 91xxx在线观看| 伊人av综合网| av在线电影网| 最近2019年好看中文字幕视频| 国产h视频在线观看| 国产亚洲精品激情久久| 国产视频二区在线观看| 亚洲人成网站777色婷婷| 你懂的好爽在线观看| 国产视频自拍一区| 欧美另类自拍| 一本色道久久88综合日韩精品| 九一国产在线| 在线性视频日韩欧美| 黄色在线播放| 亚洲人成网7777777国产| 成人精品福利| zzjj国产精品一区二区| gogo在线高清视频| 欧美激情xxxxx| 久久亚洲导航| 日本精品va在线观看| 你懂得影院夜精品a| 国产精品久久久久久久久久久久久久 | av激情在线观看| 亚洲一区免费视频| 久久精品视频1| 欧美日韩中文字幕一区| 国产片高清在线观看| 欧美精品一区二区高清在线观看 | 久久精品中文字幕电影| caopen在线视频| 91chinesevideo永久地址| 视频二区不卡| 91精品视频在线播放| 岛国成人av| 三区精品视频| 狠狠爱www人成狠狠爱综合网| 国产亚洲欧美在线视频| 免费人成黄页网站在线一区二区| 亚洲高清视频免费| 99天天综合性| 五月天色婷婷丁香| 精品国产91久久久| 曰批又黄又爽免费视频| 精品日韩在线一区| 国产在线电影| 欧美大片欧美激情性色a∨久久| 中文在线а√天堂| 国产精品视频久久| 国产三级精品三级在线观看国产| 日本10禁啪啪无遮挡免费一区二区| 91精品在线观看国产| 欧美日韩亚洲一| 韩国av一区二区三区在线观看 | 中文欧美字幕免费| 久久亚洲av午夜福利精品一区| 日本高清免费不卡视频| www.爱爱.com| www.欧美精品| 欧美片第一页| 国产一区二区不卡视频| 日韩中文在线电影| koreanbj精品视频一区| 国产一区二区三区日韩| 日韩精品电影一区二区| 亚洲国产综合人成综合网站| 中文字幕观看视频| 日韩激情第一页| 欧美激情成人动漫| 国产欧美韩国高清| 国产乱码精品一区二区亚洲 | 国产电影精品久久禁18| 日韩福利在线视频| 欧美日韩亚洲一区二| 亚洲AV无码精品国产| 久久精品色欧美aⅴ一区二区| 全亚洲第一av番号网站| 国外成人免费视频| 国产精品mm| 成人免费播放视频| 国产精品不卡一区二区三区| 最新中文字幕一区| 精品一区电影国产| 51精品在线| 99久久伊人精品影院| 国产韩国精品一区二区三区| www.日日操| www精品美女久久久tv| 日韩精品无码一区二区| 精品国产91洋老外米糕| av免费网站在线观看| 国产视频福利一区| 久久资源中文字幕| 日本中文字幕二区| 国产精品成人网| 国产农村妇女毛片精品久久| 日韩在线免费高清视频| 亚洲二区av| 久久视频免费在线| 国产成人一区二区精品非洲| 动漫性做爰视频| 日韩一区二区精品在线观看| 在线观看h网| 成人av免费在线看| 亚洲天堂激情| 给我免费观看片在线电影的| 精品久久久久久电影| 日韩av成人| 国产不卡在线观看| 成人在线免费观看91| 校园春色 亚洲色图| 国产精品成人免费在线| 国产喷水福利在线视频| 欧美激情一级欧美精品| 国产欧美三级电影| 日本三级免费观看| 欧美国产日本韩| 91在线精品入口| 欧美激情免费看| 秋霞影院一区二区三区| 亚洲爆乳无码专区| 国产精品色一区二区三区| 97在线公开视频| 欧美高清在线视频观看不卡| 国产96在线亚洲| 999香蕉视频| 日韩一区在线播放| 亚洲国产精品二区| 欧美在线视频观看免费网站| 不卡视频在线| www.偷拍.com| 欧美日韩中文字幕在线视频| 亚洲视频tv| 高清av免费一区中文字幕| 国产亚洲精品自拍| 国产第一页精品| 精品久久国产老人久久综合| 亚洲女同志freevdieo| 亚洲人成网站在线观看播放| 国产成人三级在线观看| 久久精品视频1| 另类图片亚洲另类| 亚洲毛片免费看| 日韩精品视频网址| 日韩欧美在线免费| 91在线中文| 欧美亚洲另类在线一区二区三区 | 黑丝av在线播放| 欧美三区免费完整视频在线观看| 青青青国内视频在线观看软件| 裸模一区二区三区免费| 国产精品一区二区你懂的| 国产福利拍拍拍| 久久亚洲精品成人| 天堂av一区二区三区在线播放| 日本黄色的视频| 婷婷六月综合亚洲| av理论在线观看| 性欧美videosex高清少妇| 成人动漫一区二区在线| 亚洲一级特黄毛片| 日本中文字幕不卡免费|