假设我具有以下结构:
# Add this line in jsp page #
<tr><td>Email</td><td><input name="email" required></td></tr>
# Modify this line #
String em = String.valueOf(request.getAttribute("email"));
# Change with this code #
String em = request.getParameter("email");
#Kindly modify this and add condition like above answer.#
然后我还有其他2个结构(子类):
type X struct{
Name string
Age int
Email string
}
然后在我的主要代码中,我有:
type A struct{
*X
}
type B struct{
*X
}
是否有一种简单的方法来分配a := A{&X{"John", 34, "jd@email.com"}}
b := B{&X{"Greg", 22, "gd@email.com"}}
fmt.Println(a.Name) // John
fmt.Println(b.Name) //Greg
,以便a=b
返回a.Name
以及所有其他属性(我不想单独分配它们,因为有一堆属性)
注意:我必须这样做,因为我有两个相同的数据库表(就其属性而言),而我正在使用的ORM将目标表基于结构名称。说起来,我不确定ORM如何识别执行此逻辑的结构的“结构”,但是使用嵌入式字段而不是标准字段会影响吗?
答案 0 :(得分:1)
嵌入时,非限定类型名称用作字段名称,因此您可以将嵌入值称为a.X
和b.X
。
您也可以将一个分配给另一个:
a.X = b.X
fmt.Println(a.Name) // Greg
fmt.Println(b.Name) // Greg
此后,两个都将打印Greg
。在Go Playground上尝试一下。
这里要注意的一件事。由于您的结构嵌入了指针,因此上述赋值a.X = b.X
会分配指针值。因此,在修改了其中一个字段之后,另一个字段就会受到影响。
因此,继续上面的示例:
a.X.Name = "Bob"
fmt.Println(a.Name) // Bob
fmt.Println(b.Name) // Bob
两个名称均更改为Bob
(try it)。如果您不希望这样做,则分配指针值,而不是指针:
*a.X = *b.X
fmt.Println(a.Name) // Greg
fmt.Println(b.Name) // Greg
这将再次打印Greg
两次。在Go Playground上尝试一下。
现在,如果您这样做:
a.X.Name = "Bob"
fmt.Println(a.Name) // Bob
fmt.Println(b.Name) // Greg
只有a.Name
发生了变化,但没有b.Name
(try it)发生变化。