在go中动态调用模型

在go中动态调用模型,go,dynamic,struct,model,go-gorm,Go,Dynamic,Struct,Model,Go Gorm,考虑牛仔裤、衬衫、短裤等产品,我希望将订单存储在各自的产品表中,例如牛仔裤相关订单应存储在牛仔裤表中等等。每个表都有相同的参数。因此,在表中存储订单时,我应该能够调用相应的结构并存储订单。 我来自Laravel(PHP)的背景,在那里我可以加载动态模型,比如 $model = "Dynamic passed model names" $class = "App\\Models\\$model"; 但是在Go中,如果调用dynamic struct,我们怎么做呢 e、 g, 在ABC.go型中

考虑牛仔裤、衬衫、短裤等产品,我希望将订单存储在各自的产品表中,例如牛仔裤相关订单应存储在牛仔裤表中等等。每个表都有相同的参数。因此,在表中存储订单时,我应该能够调用相应的结构并存储订单。 我来自Laravel(PHP)的背景,在那里我可以加载动态模型,比如

$model = "Dynamic passed model names"

$class = "App\\Models\\$model";
但是在Go中,如果调用dynamic struct,我们怎么做呢

e、 g,

在ABC.go型中

type ABC struct{
  Name string
  Invetory int
}
在型号XYZ.go中

type XYZ struct {
  Name string
  Invetory int
}
所以输入可以是ABC或XYZ,我必须相应地加载结构

加载结构ABC

inpt := "ABC"

product := models.<inpt>{
  Name: "prodct name"
  Inventory: 10
}
inpt:=“ABC”
产品:=型号{
名称:“产品名称”
库存:10
}

在上面的代码段中,模型名称是动态的。在围棋中,我们如何做到这一点呢?

不要尝试从其他语言移植方法和编程模式到围棋中去——这样做最多只能让你的生活更艰难,最坏也只能以眼泪告终

您可以执行以下操作:

type Inventory interface{
 // Your interface defining methods here
}

var toUse Inventory

switch input {
case "ABC":
   toUse = ABC{}
case "XY":
   toUse = XY{}
}

问题是为什么你有两种完全相同的类型(除了打字错误)

不要尝试从其他语言移植方法和编程模式-这最多会让你的生活更艰难,最坏的情况下会以眼泪告终

您可以执行以下操作:

type Inventory interface{
 // Your interface defining methods here
}

var toUse Inventory

switch input {
case "ABC":
   toUse = ABC{}
case "XY":
   toUse = XY{}
}

问题是为什么有两种完全相同的类型(除了打字错误之外)。

我从来没有过必须动态加载结构的情况。不方便-这里的用例是什么。如果您的产品表是相同的,那么它们可能应该是一个表,带有
product
列。@MarkusWMahlberg,以减少表上的负载。基本上,我们将数据分布在不同的(各自的)表中。实际上,我从来没有一个点需要动态加载结构。不方便-这里的用例是什么。如果您的产品表是相同的,那么它们可能应该是一个表,带有
product
列。@MarkusWMahlberg,以减少表上的负载。基本上,我们将数据分布在不同的(各自的)表中。可能有n个模型,我不能一直为每个模型添加案例。@AmitSharma再次-您的体系结构似乎有缺陷。在大约30年的编程过程中,我从未动态加载过数据模型,更不用说任意数量的数据了我不能“似乎更像是一个“我不想”,tbh。就我所知,你的问题更像是一个“是不是成为Laravell的替代品,但只是增加了一些很酷的功能?”?“答案是否定的。我在这里有一些场景,目前,我正在开发一个加密货币交换平台,用户可以在我们的平台上与各种对进行交易,如BTC_USDT、BTC_BNB、BTC_LTC等。因此,为了减少我们认为的数据库负载,我们应该将交易订单存储在相应的加密对表中。如BTC_USDTtbl_btc_usdt中的订单等等。我不想为每对订单创建单独的API,而是使用单个API端点并动态调用表结构。@AmitSharma如何将货币设置为一个异常值?
键入Exchange struct{type ExchangeType,currency currency,amount float}
如果ExchangeType可以是put或call,则货币是a,并且所有货币都以一个数据模型结束?@AmitSharma:您描述的不是N个模型,而是1个模型,有N个实例。可能有N个模型,我无法继续为每个模型添加案例。@AmitSharma再一次-您的体系结构似乎有缺陷d、 在大约30年的编程过程中,我从来没有动态加载过一个数据模型,更不用说一个任意的数字了。“我不能”似乎更像是“我不想”,tbh。据我所知,你的问题更多的是“是不是要取代Laravell,只是增加了一些很酷的功能?”?“答案是否定的。我在这里有一些场景,目前,我正在开发一个加密货币交换平台,用户可以在我们的平台上与各种对进行交易,如BTC_USDT、BTC_BNB、BTC_LTC等。因此,为了减少我们认为的数据库负载,我们应该将交易订单存储在相应的加密对表中。如BTC_USDTtbl_btc_usdt中的订单等等。我不想为每对订单创建单独的API,而是使用单个API端点并动态调用表结构。@AmitSharma如何将货币设置为一个异常值?
键入Exchange struct{type ExchangeType,currency currency,amount float}
如果ExchangeType可以是put也可以是call,那么货币就是a,而所有货币都只有一个数据模型?@AmitSharma:您描述的不是N个模型,而是1个模型,有N个实例。