gpt4 book ai didi

go - 使用反射设置字段

转载 作者:IT王子 更新时间:2023-10-29 02:21:38 26 4
gpt4 key购买 nike

几天来,我一直在努力处理一些 Go 语言代码。我有一个 golang 函数,可以在结构中设置所有公共(public)字段,如 createdBy、updatedBy 等。我在谷歌上搜索了很多,并得出了以下代码。

package main

import (
"fmt"
"reflect"
"time"
"strings"
)
type User struct {
UserId string `json:"userId"`
ObjectType string `json:"objectType"`
CreationDate string `json:"creationDate"`
UpdationDate string `json:"updationDate"`
Version int `json:"version"`
}
func main() {
//fmt.Println("Hello, playground")
var user = User{}
var k = setCommonParam(&user )
var p = k.(*User)
fmt.Println(p.CreationDate)
var l = *p
fmt.Println(l.ObjectType)
fmt.Println(reflect.TypeOf(k))
fmt.Println(reflect.TypeOf(user))

}

func setCommonParam(obj interface{}) (interface{}) {
entityValue := reflect.ValueOf(obj).Elem()
entityType := entityValue.Type()

for i:=0; i<entityValue.NumField(); i++ {
typeField := entityType.Field(i)
vField := entityValue.Field(i)

if typeField.Name == "ObjectType" {
vField.SetString(strings.ToLower(reflect.TypeOf(obj).Elem().Name()))
} else if typeField.Name == "CreationDate" {
vField.SetString(time.Now().Format(time.RFC3339))
} else if typeField.Name == "UpdationDate" {
vField.SetString(time.Now().Format(time.RFC3339))
} else if typeField.Name == "CreatedBy" {

} else if typeField.Name == "UpdatedBy" {

} else if typeField.Name == "Version" {

}
}
return obj
}

有什么办法可以在一行中写出以下内容吗?

var k = setCommonParam(&user )
var p = k.(*User)
var l = *p

然后做这样的事情:

user = setCommonParam(user)

对不起,我是新手。谢谢。

最佳答案

如果您的问题是“如何将这 3 行压缩为一条?”,那么答案是:

var l = *(setCommonParam(&user).(*User))

关于go - 使用反射设置字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com