使用简单分配,您不能这样做,因为即使的字段
User是的子集
RegistrationRequest,它们也完全是2种不同的类型,并且可分配性规则不适用。
您可以编写一个使用反射(
reflect包)的函数,并将所有字段从复制
req到
u,但这很丑陋(且效率低下)。
最好是重构您的类型,并
RegistrationRequest可以嵌入
User。
如果您具有类型的值,则这样做
RegistrationRequest意味着您也已经具有值
User:
type User struct { Email *string Username *string Password *string Name string}type RegistrationRequest struct { User // Embedding User type Email2 *string}func main() { req := RegistrationRequest{} s := "as@as.com" req.Email = &s s2 := "testuser" req.Username = &s2 u := User{} u = req.User fmt.Println(*u.Username, *u.Email)}输出:(在Go Playground上尝试)
testuser as@as.com
另外请注意,由于您的结构包含指针,因此在复制时
struct,将复制指针值而不是指针值。我不确定为什么在这里需要指针,最好将所有字段声明为非指针。
还要注意,嵌入并不是真正的要求,它只是使您的类型及其用法更加平滑。
User也可能是的“普通”字段
RequistrationRequest,例如:
type RegistrationRequest struct { Usr User // This is just an ordinary field, not embedding Email2 *string}


