php小编西瓜在这里为大家介绍一个有关使用其他“部分”结构中的值覆盖结构字段的方法。在编程中,我们经常需要根据不同的情况来更新结构字段的值。这种情况下,我们可以使用其他结构中的值来覆盖目标结构中的字段。这种方法非常实用,可以提高代码的可读性和灵活性。接下来,我将详细介绍如何使用这种技巧来简化代码并提高效率。
问题内容
我是 Go 新手,正在尝试创建 CRUD API。请原谅 Go 中的 OOP 方法可能不聪明。我有一个结构,我想通过 PATCH 端点进行部分更新。
type Book struct {
Id uuid.UUID `json:"id"`
Author uuid.UUID `json:"author"`
Title string `json:"title"`
IsPublic bool `json:"isPublic"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt *time.Time `json:"updatedAt"`
DeletedAt *time.Time `json:"deletedAt"`
}
登录后复制
我已经定义了第二个结构体,其中包含一本书的可更新属性。
type PatchBookDto struct {
Author *uuid.UUID
Title *string
IsPublic *bool
}
登录后复制
在这两个结构中,我都使用(可能滥用?)指针属性来模拟可选参数。我想要实现的是用 PatchBookDto 中的任何给定属性覆盖一本书。这是我迄今为止的尝试:
var book models.Book // Is taken from an array of books
var dto dtos.PatchBookDto
if err := c.BindJSON(&dto); err != nil {
// Abort
}
dtoTypeInfo := reflect.TypeOf(&dto).Elem()
for i := 0; i 登录后复制
当我测试这个时,我收到 reflect.Value.Convert: value of type *string Cannot be conversion to type string
错误。
有人知道我可以在这里改进什么以获得我需要的东西吗?
解决方法
看起来您打算将恐慌行放在 if dtoField.Type.Kind() ==reflect.Ptr
的 else 块中。
另一种方法是使用间接指针,然后设置值。
for i := 0; i 登录后复制
以上就是使用其他“部分”结构中的值覆盖结构字段的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!