如何实现遍历结构体字段? 好吧,言归正传!举个例子:
demo1:
package main
import ( "fmt"
"reflect")
type Student struct {
name string
age int}
func main() {
v := reflect.ValueOf(Student{"乔峰", 29})
count := v.NumField() for i := 0; i < count; i++ {
f := v.Field(i) //字段值 switch f.Kind() { case reflect.String:
fmt.Println(f.String()) case reflect.Int:
fmt.Println(f.Int())
}
}
}再举给栗子:
package main
import ( "fmt"
"reflect")
type LanType struct {
s1, s2, s3 string}var language interface{} = LanType{"Php", "Go", "Python3"}
func main() {
value := reflect.ValueOf(language) for i := 0; i < value.NumField(); i++ {
fmt.Printf("字段索引 %d: %v\n", i, value.Field(i))
}
}输出:
BASIC
字段索引 0: Php 字段索引 1: Go字段索引 2: Python3遍历切片
使用 for range遍历:
package main
import ( "fmt")
func main() {
language := []string{"Php", "Go", "Python3"} for k, val := range language {
fmt.Printf("切片索引 %d is :%s\n", k, val)
}
}输出:
BASIC
切片索引 0 is :Php 切片索引 1 is :Go切片索引 2 is :Python3遍历Map
package main
import ( "fmt")
func main() {
language := make(map[string]string)
language["1"] = "Php"
language["2"] = "Go"
language["3"] = "Python3"
language["4"] = "C#"
for key, val := range language {
fmt.Printf("%v=>%v\n", key, val)
}
}输出:这里就不贴了,结果会随机输出,因为map遍历出来结果是无序的,顺序不好控制,也不利于业务逻辑;当业务依赖key次序时,那么我们就需要引入“sort”包来解决随机化问题:
比如这样:
package main
import ( "fmt"
"sort")
func main() {
language := make(map[string]string)
language["1"] = "Php"
language["2"] = "Go"
language["3"] = "Python3"
language["4"] = "C#"
sorted_keys := make([]string, 0) for k, _ := range language {
sorted_keys = append(sorted_keys, k) // 提取键名 }
sort.Strings(sorted_keys) //
for _, k := range sorted_keys {
fmt.Printf("%v=>%v\n", k, language[k])
}
}输出:
BASIC
1=>Php2=>Go3=>Python34=>C#
这样输出的结果运行多次也不会改变顺序。