Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射
驗證字段Z是否存在于結(jié)構(gòu)類型Test中
下面的代碼片段聲明了具有字段A、B和C的結(jié)構(gòu)類型Test。我們需要驗證字段Z是否存在于結(jié)構(gòu)類型Test中。
示例代碼:
package main
import (
"log"
"reflect"
)
func main() {
type test struct {
A bool
B bool
C bool
}
v := new(test)
metaValue := reflect.ValueOf(v).Elem()
for _, name := range []string{"A", "C", "Z"} {
field := metaValue.FieldByName(name)
if field == (reflect.Value{}) {
log.Printf("Field %s not exist in struct", name)
}
}
}輸出:
2009/11/10 23:00:00 Field Z not exist in struct
創(chuàng)建結(jié)構(gòu)體切片
示例代碼:
package main
import (
"fmt"
)
type Widget struct {
id int
attrs []string
}
func main() {
widgets := []Widget{
Widget{
id: 10,
attrs: []string{"blah", "foo"},
},
Widget{
id: 11,
attrs: []string{"foo", "bar"},
},
Widget{
id: 12,
attrs: []string{"xyz"},
},
}
for _, j := range widgets {
fmt.Printf("%d ", j.id)
for _, y := range j.attrs {
fmt.Printf(" %s ", y)
}
fmt.Println()
}
}輸出:
10 blah foo
11 foo bar
12 xyz
創(chuàng)建結(jié)構(gòu)體映射
示例代碼:
package main
import "fmt"
type Emp struct {
x int
y []string
}
func main() {
var list = map[string]*Emp{"e1": {1001, []string{"John", "US"}}}
e := new(Emp)
e.x = 1002
e.y = []string{"Rock", "UK"}
list["e2"] = e
fmt.Println(list["e1"])
fmt.Println(list["e2"])
}輸出:
&{1001 [John US]}
&{1002 [Rock UK]}
以上就是Go檢查結(jié)構(gòu)體中是否存在某個字段及創(chuàng)建結(jié)構(gòu)體切片或映射的詳細內(nèi)容,更多關(guān)于Go結(jié)構(gòu)體檢查創(chuàng)建的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang網(wǎng)絡(luò)socket粘包問題的解決方法
這篇文章主要介紹了golang網(wǎng)絡(luò)socket粘包問題的解決方法,簡單講述了socket粘包的定義并結(jié)合實例形式分析了Go語言解決粘包問題的方法,需要的朋友可以參考下2016-07-07
Golang自定義開發(fā)Prometheus?exporter詳解
Exporter是基于Prometheus實施的監(jiān)控系統(tǒng)中重要的組成部分,承擔數(shù)據(jù)指標的采集工作,這篇文章主要為大家介紹了如何自定義編寫開發(fā)?Prometheus?exporter,感興趣的可以了解一下2023-06-06
Go簡單實現(xiàn)協(xié)程池的實現(xiàn)示例
本文主要介紹了Go簡單實現(xiàn)協(xié)程池的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06

