所以我有以下两种方法:
func Marshal(in interface{}) (out []byte, err error)
func readDocument(r io.Reader) ([]byte, error)
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我执行以下操作:
queryDoc, err := readDocument(client) // querydoc is slice of len 408
if something {
queryDoc, err := bson.Marshal(something)
newDocLen := len(queryDoc) // len is now 200
}
len(queryDoc) // len is 408????
Run Code Online (Sandbox Code Playgroud)
出于某种原因,queryDoc 不会随着解组而更新。但是,如果我分配给一个中间值,它会起作用:
queryDoc, err := readDocument(client) // querydoc is slice of len 408
if something {
q, err := bson.Marshal(something)
queryDoc = q
newDocLen := len(queryDoc) // len is now 200
}
len(queryDoc) // …Run Code Online (Sandbox Code Playgroud) 我想将地图的所有键加入到[k1,k2,...]形式的单个字符串中.我并不过分担心订单,只是我可以制作字符串.我知道有功能,strings.Join()但它需要一个[]string而不是一个map[string]bool.
我想以最有效/最快的方式做到这一点(即我不想创建密钥的完整副本,因此我可以切片).我找不到一种方法来获得一张地图的键,所以我提出了以下功能.显然它不是最好的,因为它做了不必要的写和截断.
有没有办法只切片地图键?
func CreateStringArray(myMap map[string]bool) string {
if myMap == nil || len(myMap) == 0 {
return "[ ]"
}
buf := bytes.NewBufferString("[")
for k, _ := range myMap {
buf.WriteString(k)
buf.WriteString(", ")
}
buf.Truncate(buf.Len() - 2)
buf.WriteString("]")
return buf.String()
}
Run Code Online (Sandbox Code Playgroud) 这种类型的断言,def-referenceing 已经让我发疯了。所以我有一个Key string / Value interface{}成对的嵌套结构。存储在Value是[]interface,我想修改每个值。下面是创建一个数组Bar并将其传递到ModifyAndPrint应该修改顶级结构的函数的示例。我遇到的问题是,它实际上并没有修改 z 的内容,我不能做 aq := z.([]interface{})[i].(Bar)或&其中的内容。
有没有办法做到这一点?如果是这样,我错过了什么组合?
package main
import "fmt"
type Bar struct {
Name string
Value int
}
func ModifyAndPrint(z interface{}){
fmt.Printf("z before: %v\n", z)
for i, _ := range(z.([]interface{})) {
q := z.([]interface{})[i]
b := (q).(Bar)
b.Value = 42
fmt.Printf("Changed to: %v\n", b)
}
fmt.Printf("z after: %v\n", z)
}
func main() {
bars := make([]interface{}, 2)
bars[0] = …Run Code Online (Sandbox Code Playgroud) 我正在寻找对MongoDB 中的常规(即非聚合)查询执行相当于$setIsSubset http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset/的操作。我怎样才能做到这一点?
假设我有文件
{ 'x' : ['A', 'B'] }
{ 'x' : ['A', 'D'] }
Run Code Online (Sandbox Code Playgroud)
然后
{ 'x' : ['A', 'B'] }
{ 'x' : ['A', 'D'] }
Run Code Online (Sandbox Code Playgroud)
我想做一个
find({"x" : {'$setIsSubSet':filter}}),只希望能回来
{ 'x' : ['A', 'B'] }
Run Code Online (Sandbox Code Playgroud)
似乎大多数条件命令都与任何不匹配。 我也希望它是一个子集,因此它似乎$and并$all不会匹配[A,B]到[A,B,C]。
如何使用plotly?在子图上绘制矩形(边界框)?我有一个图表
fig = plotly.tools.make_subplots(rows=2, cols=1)
Run Code Online (Sandbox Code Playgroud)
我想在第2行的情节中添加一个矩形.对于第一行我可以做
fig['layout']['shapes'].append(
{
'type': 'rect',
'x0': 1,
'x1': 2,
'y0': 3,
'y1': 4,
'line': {'color': 'red'}
}
)
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何在第二行制作一个矩形.
所以我有以下文件
/src/baseService.thrift
/baseTypes.thrift
/baseSecurity.thrift
Run Code Online (Sandbox Code Playgroud)
我希望将所有这些thrift定义创建到一个库中.因此,每个文件的顶部是:
baseService.thrift
==================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
import "baseTypes.thrift"
baseTypes.thrift
================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
baseSecurity.thrift
===================
namespace java foo.bar
namespace cpp foo.bar
namespace js foo.bar
namespace go foo.bar
import "baseTypes.thrift"
Run Code Online (Sandbox Code Playgroud)
问题是,如何将所有这些创建到一个lib包中?它适用于java/cpp/js但是当我尝试构建时,它是不行的.
有了节俭,你不能做thrift gen:baz *.thrift,你必须一次做一个文件.对于其他语言,我们只做一个:
for f in `find *.thrift`; do
thrift -o myGenDir --gen go $f"
done
Run Code Online (Sandbox Code Playgroud)
(用每个lang替换相应的gen命令)
对于Python来说这很好,因为它根据文件名[即foo/bar/{filename} /ttypes.py]将每个gen文件放在它自己的dir中.对于Java,它会转储foo/bar /中的所有文件,但每个类名都是唯一的.对于cpp,它将所有内容转储到gen目录中,但每个thrift文件[so {filename.h},{filename.cpp}]唯一命名.但是对于Go,它会将所有内容转储到foo/bar中,如下所示:
/foo/bar/constants.go
/foo/bar/service.go
/foo/bar/service-remote/
/foo/bar/baz/ [for …Run Code Online (Sandbox Code Playgroud)