Go 使用结构的变量创建结构的切片

Go 使用结构的变量创建结构的切片,go,struct,type-conversion,go-reflect,Go,Struct,Type Conversion,Go Reflect,在我的func中,我有一个Product struct变量,但我没有访问Product struct的权限,我想从它的变量中提取一部分产品,例如: test1 := Product{} .... .... .... test2 := []TypeOf(test1) 我该怎么做 更新: 我真正想要实现的是什么 我有一些要在gorm适配器中使用的结构 例如,在我的适配器中,我有一个FindAll方法,它需要我的一个结构的切片 我所有的结构都在一个名为Domains的包中,我不想从where u

在我的func中,我有一个Product struct变量,但我没有访问Product struct的权限,我想从它的变量中提取一部分产品,例如:

test1 := Product{}

....
....
....

test2 := []TypeOf(test1)
我该怎么做

更新: 我真正想要实现的是什么

我有一些要在gorm适配器中使用的结构

例如,在我的适配器中,我有一个FindAll方法,它需要我的一个结构的切片

我所有的结构都在一个名为Domains的包中,我不想从where use(call)FindAll函数发送所需的变量

现在,我将所有结构注册到一个映射中,并使用结构名在适配器中获取它们
但是结果是该结构的一个变量不是该结构的类型,所以我不能从中生成另一个变量或从中生成一个片段。

你可以使用,特别是
类型的
切片的
MakeSlice
,但是,它不会很有用,因为你只能将它作为
接口{}来引用
,不能像切片一样使用。或者,您可以将其分配给类型为
[]接口{}
的切片,这将允许您使用该切片,但同样,如果无法引用底层类型,您就无法真正使用这些值。您可能需要重新考虑您的设计。

您可以使用,特别是
TypeOf
SliceOf
MakeSlice
,来实现这一点,但是,它不会非常有用,因为您只能将其作为
接口{}
来引用,而不能像切片那样使用。或者,您可以将其分配给类型为
[]接口{}
的切片,这将允许您使用该切片,但同样,如果无法引用底层类型,您就无法真正使用这些值。您可能需要重新考虑您的设计。

您想要使用test1元素的产品切片吗

package main

import "fmt"

type Product struct{
    Price float64
}

func main() {
   test1 := Product{Price: 1.00}

   test2 := []Product{test1}
   fmt.Println(test2)
}

您想要使用test1元素的产品切片吗

package main

import "fmt"

type Product struct{
    Price float64
}

func main() {
   test1 := Product{Price: 1.00}

   test2 := []Product{test1}
   fmt.Println(test2)
}

这可能是一个-你到底想实现什么?不,我想不是。我更新了我的问题,以解释我的用例和我的实际目标@Adrian一旦你从gorm中获得它,你将如何处理它?一个你不能引用的片段仍然是无用的。我将它转换为map并返回使用它…不管它是map还是slice,如果你不能引用一个有意义的类型,如果你不做大量的反射,你就不能用它做很多有用的事情。这可能是一个-你到底想实现什么?不,我认为不是。我更新了我的问题,以解释我的用例和我的实际目标@Adrian一旦你从gorm中获得它,你将如何处理它?无法引用的切片仍然是无用的。我将其转换为映射并返回使用它…无论它是映射还是切片,如果无法引用有意义的类型,如果不进行大量的反射,您就无法使用它。问题说明“我无法访问产品结构”,我相信这意味着他们不能引用它,也就是说,他们不能仅仅创建一个
[]产品
。但也许提问者可以解释。@eXMooR@Adrian是的,我没有直接访问产品类型的权限,所以我不能使用:``test2:=[]产品{}``问题说明“我没有访问产品结构的权限”,我相信这意味着他们不能引用它-也就是说,他们不能仅仅创建一个
[]产品
。但也许提问者可以解释。@eXMooR@Adrian是的,我无法直接访问产品类型,所以我不能使用:``test2:=[]产品{}``谢谢你@Adrian我已经试过了!正如你所说,没有好结果。我想我应该描述一下我的用例,并讨论一下新的方法。谢谢@Adrian,我已经试过了!正如你所说,没有好结果。我认为我应该描述我的用例并讨论新方法。