php小編草莓為您介紹特定欄位的通用結構,用於將存取傳遞給可變參數函數。可變參數函數是一種接受不定數量參數的函數,但在實際應用中,我們常常需要將特定欄位的值傳遞給這些函數。透過這種通用結構,我們可以輕鬆地將存取傳遞給可變參數函數,並指定特定欄位的值,從而實現更靈活和精確的參數傳遞。這種通用結構可以大大簡化我們的程式碼,並提高程式碼的可讀性和可維護性。
問題內容
假設我有一個名為 foo
的通用 struct
:
type foo[t any] struct { data t }
我有一個可變參數函數,我想將一些 foo
s 傳遞給它。它們可以是任何類型的 foo
。我的理解是,因為foo[int]
與foo[string]
不同,所以我需要將省略號定義為any
類型,如下所示:
func bar(things ...any) { for _, v := range things { fmt.println(v) } }
這確實有效。
func main() { a := foo[string]{"cheese"} b := foo[int]{42} bar(a, b) }
我的問題是我想專門存取每個 foo
中的 data
欄位。但是如果我像這樣定義 bar
,
func bar(things ...any) { for _, v := range things { fmt.println(v.data) } }
編譯器會感到不安,這是可以理解的,因為 things
可能是任何東西,因此不能保證它們具有 data
欄位。
我知道會有一個名為data
的字段,因為我總是傳遞foo
s,但我不能指定我只傳遞 foo
s,就像這樣,
func bar(things ...foo) { for _, v := range things { fmt.Println(v.data) } }
因為沒有指定foo
的型別。
如何將未指定數量的 foo
傳遞給 bar
,然後存取 data
欄位?
解決方法
一種解決方案似乎是使用反射並使用 fieldbyname
存取該欄位:
func bar(things ...any) { for _, v := range things { x := reflect.ValueOf(v) fmt.Println(x.FieldByName("data")) } }
我不清楚這是否會因為某種原因被認為是一種障礙和/或危險。據推測,我需要在那裡進行一些檢查,以確保 things
中的所有內容實際上都是某種 foo
,否則我可能會嘗試訪問不存在的字段。
以上是存取傳遞給可變參數函數的通用結構的特定字段的詳細內容。更多資訊請關注PHP中文網其他相關文章!

whentestinggocodewithinitfunctions,useexplicitseTupfunctionsorseParateTestFileSteSteTepteTementDippedDependendendencyOnInItfunctionsIdeFunctionSideFunctionsEffect.1)useexplicitsetupfunctionStocontrolglobalvaribalization.2)createSepEpontrolglobalvarialization

go'serrorhandlingurturnserrorsasvalues,與Javaandpythonwhichuseexceptions.1)go'smethodensursexplitirorhanderling,propertingrobustcodebutincreasingverbosity.2)

AnefactiveInterfaceingoisminimal,clear and promotesloosecoupling.1)minimizeTheInterfaceForflexibility andeaseofimplementation.2)useInterInterfaceForabStractionToswaPimplementations withoutchangingCallingCode.3)

集中式錯誤處理在Go語言中可以提升代碼的可讀性和可維護性。其實現方式和優勢包括:1.將錯誤處理邏輯從業務邏輯中分離,簡化代碼。 2.通過集中處理錯誤,確保錯誤處理的一致性。 3.使用defer和recover來捕獲和處理panic,增強程序健壯性。

Ingo,替代詞InivestoIniTfunctionsIncludeCustomInitializationfunctionsandsingletons.1)customInitializationfunctions hownerexpliticpliticpliticconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconconcontirization curssetupssetupssetups.2)單次固定無元素限制ininconconcurrent

Gohandlesinterfacesandtypeassertionseffectively,enhancingcodeflexibilityandrobustness.1)Typeassertionsallowruntimetypechecking,asseenwiththeShapeinterfaceandCircletype.2)Typeswitcheshandlemultipletypesefficiently,usefulforvariousshapesimplementingthe

Go語言的錯誤處理通過errors.Is和errors.As函數變得更加靈活和可讀。 1.errors.Is用於檢查錯誤是否與指定錯誤相同,適用於錯誤鏈的處理。 2.errors.As不僅能檢查錯誤類型,還能將錯誤轉換為具體類型,方便提取錯誤信息。使用這些函數可以簡化錯誤處理邏輯,但需注意錯誤鏈的正確傳遞和避免過度依賴以防代碼複雜化。

tomakegoapplicationsRunfasterandMorefly,useProflingTools,leverageConCurrency,andManageMoryfectily.1)usepprofforcpuorforcpuandmemoryproflingtoidentifybottlenecks.2)upitizegorizegoroutizegoroutinesandchannelstoparalletaparelalyizetasksandimproverperformance.3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器