fis*_*ben 0 reflection unit-testing go
在我的测试中,我有一个可以从以下结构中获取值的函数:
func getField(v interface{}, field string) string {
r := reflect.ValueOf(v)
f := reflect.Indirect(r).FieldByName(field)
t := f.Kind()
switch t {
case reflect.Int, reflect.Int64:
return strconv.FormatInt(f.Int(), 10)
case reflect.String:
return f.String()
case reflect.Bool:
if f.Bool() {
return "true"
}
return "false"
return ""
}
Run Code Online (Sandbox Code Playgroud)
这适用于上面的类型,但我无法使用它time.Time。我该怎么做呢?
从您要尝试做的事情来看,获得该领域之后,您实际上并不需要反思。这也是一个示例time.Time。
package main
import (
"fmt"
"reflect"
"strconv"
"time"
)
func getField(v interface{}, field string) string {
r := reflect.ValueOf(v)
f := reflect.Indirect(r).FieldByName(field)
fieldValue := f.Interface()
switch v := fieldValue.(type) {
case int64:
return strconv.FormatInt(v, 10)
case int32:
return strconv.FormatInt(int64(v), 10)
case int:
return strconv.FormatInt(int64(v), 10)
case string:
return v
case bool:
if v {
return "true"
}
return "false"
case time.Time:
return v.String()
default:
return ""
}
}
type MyStruct struct {
Name string
Number int32
Is bool
Clock time.Time
}
func main() {
s := MyStruct{}
fmt.Println(getField(s, "Name"))
fmt.Println(getField(s, "Number"))
fmt.Println(getField(s, "Is"))
fmt.Println(getField(s, "Clock"))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |