我正在尝试编写一些通用方法(CRUD方法)以在我的服务之间共享它。以下示例是一种GetAll()
方法,该方法返回集合中存在的所有文档:
func GetAll(out interface{}) error {
// mongodb operations
// iterate through all documents
for cursor.Next(ctx) {
var item interface{}
// decode the document
if err := cursor.Decode(&item); err != nil {
return err
}
(*out) = append((*out), item)
// arrays.AppendToArray(out, item) // Read below :)
}
return nil // if no error
}
我也做了一些反思,但后来:
package arrays
import "reflect"
func AppendToArray(slicePtrInterface interface{}, item interface{}) {
// enter `reflect`-land
slicePtrValue := reflect.ValueOf(slicePtrInterface)
// get the type
slicePtrType := slicePtrValue.Type()
// navigate from `*[]T` to `T`
_ = slicePtrType.Elem().Elem() // crashes if input type not `*[]T`
// we'll need this to Append() to
sliceValue := reflect.Indirect(slicePtrValue)
// append requested number of zeroes
sliceValue.Set(reflect.Append(sliceValue, reflect.ValueOf(item)))
}
恐慌:reflect.Set:原始类型D的值不能分配给 mongodb.Test类型[已恢复]恐慌:reflect.Set:原始类型D的值不能分配给
mongodb.Test类型
我想要的是与cursor.Decode(&item)
(您可以在上面看到的)相同的方法
方法如下:
// GetAll decodes the cursor c to slicep where slicep is a
// pointer to a slice of pointers to values.
func GetAll(ctx context.Context, c *Cursor, slicep interface{}) error {
// Get the slice. Call Elem() because arg is pointer to the slice.
slicev := reflect.ValueOf(slicep).Elem()
// Get value type. First call to Elem() gets slice
// element type. Second call to Elem() dereferences
// the pointer type.
valuet := slicev.Type().Elem().Elem()
// Iterate through the cursor...
for c.Next(ctx) {
// Create new value.
valuep := reflect.New(valuet)
// Decode to that value.
if err := c.Decode(valuep.Interface()); err != nil {
return err
}
// Append value pointer to slice.
slicev.Set(reflect.Append(slicev, valuep))
}
return c.Err()
}
这样称呼它:
var data []*T
err := GetAll(ctx, c, &data)
if err != nil {
// handle error
}
在Go Playground上运行它。
这是与非指针切片元素一起使用的代码的概括:
func GetAll(ctx context.Context, c *Cursor, slicep interface{}) error {
slicev := reflect.ValueOf(slicep).Elem()
valuet := slicev.Type().Elem()
isPtr := valuet.Kind() == reflect.Ptr
if isPtr {
valuet = valuet.Elem()
}
for c.Next(ctx) {
valuep := reflect.New(valuet)
if err := c.Decode(valuep.Interface()); err != nil {
return err
}
if !isPtr {
valuep = valuep.Elem()
}
slicev.Set(reflect.Append(slicev, valuep))
}
return c.Err()
}
问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿
问题内容: 我正在寻找将Java char数组转换为字节数组 而不创建中间体的方法,因为char数组包含密码。我查看了几种方法,但是它们似乎都失败了: 断言总是失败的(并且,至关重要的是,当在生产中使用该代码时,密码将被拒绝),但是print语句会打印出三次密码。为什么与和有所不同,却显得相同?我是否错过了空终止符之类的东西?我怎样做才能使转换和未转换工作? 问题答案: 问题是您使用构造函数,该构
问题内容: 我可以将数组作为url参数传递的最佳方法是什么?我在想这是否可能: 还是这样: 香港专业教育学院阅读示例,但我发现它很混乱: 问题答案: 有一个非常简单的解决方案:。它把您的查询参数作为一个关联数组: 将返回 为您处理所有必需的转义(=> 和=> ),因此此字符串等于。
问题内容: 我刚刚为组织此表中第70页上显示的查询层次结构数据的“关闭表”方法做了“更新/添加/删除”部分:http ://www.slideshare.net/billkarwin/sql-antipatterns- strike -背部 我的数据库如下所示: 表类别: 表类别树: 但是,从单个查询获取整棵树作为多维数组时,我遇到了一个问题。 这是我想回来的东西: 更新: 找到了此链接,但是我仍
问题内容: 我要实现的是: 我怎样才能返回对象,而是如果? 问题答案: 我找到了解决方案。在结果上创建了扩展名。 并使用像
问题内容: 我想将结果数组转换为PHP中的JSON格式。这是我的代码: 我想转换为JSON格式并将JSON数据传递给jQuery插件。 问题答案: 在php> 5.2.0中可用: