我正在尝试构建一个库,它会自动将结构类型作为RESTful资源提供。
这是我在调用代码中看起来的样子:
package main
import (
"fmt"
"github.com/sergiotapia/paprika"
)
type Product struct {
Name string
Quantity int
}
func main() {
// You need to attach a resource by giving Paprika your route,
// the struct type and optionally a custom resource manager.
paprika.Attach("/products", Product, nil)
paprika.Start(1337)
log.Print("Paprika is up and running.")
}
在我的图书馆内,我试图创建附加功能:
package paprika
import (
"fmt"
)
func Attach(route string, resource Type, manager ResourceManager) {
}
func Start(port int) {
}
type ResourceManager interface {
add() error
delete() error
update(id int) error
show(id int) error
list() error
}
我如何接受任何" Type"结构?我的最终目标是使用反射来获取类型名称及其字段(这部分我已经知道该怎么做)。
有关如何处理此事的任何建议?
答案 0 :(得分:1)
我找到的方法是:
func Attach(route string, resource interface{}) {
fmt.Println(route)
fmt.Println(reflect.TypeOf(resource))
}
然后我可以使用我想要的任何类型:
type Product struct {
Name string
Quantity int
}
func main() {
Attach("/products", new(Product))
}
结果:
/products
*main.Product
除非有更为惯用的方法,否则我认为我找到了解决方案。
答案 1 :(得分:0)
您可以使用interface{}
作为函数的参数类型。然后,使用type switch来了解参数的 real 类型非常容易。
func MyFunc(param interface{}) {
switch param.(type) {
case Product:
DoSomething()
case int64:
DoSomethingElse()
case []uint:
AnotherThing()
default:
fmt.Println("Unsuported type!")
}
}