我在 ruby 中有一个 protobuf 对象,它有一个映射作为一个参数。我怎样才能创建一个Google::Protobuf::Map?如果我尝试输入标准哈希表,则会收到错误Expected Map instance。
- 编辑 -
在这里找到答案: https: //developers.google.com/protocol-buffers/docs/reference/ruby- generated#map-fields,如果有人需要的话。
这是我当前的代码:
import (
"time"
"reflect"
"io/ioutil"
"fmt"
"os"
"github.com/golang/protobuf/proto"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/aws/credentials"
)
f, err := os.Create(filename)
if err != nil {
panic(fmt.Errorf("failed to create file %q, %v", filename, err))
}
_, err = db.Downloader.Download(f, &s3.GetObjectInput{
Bucket: aws.String("bucketName"),
Key: aws.String("myKeyThatMightExist"),
})
if err != nil { // key doesn't exist
os.Remove(filename)
return nil
} else {
file, err = ioutil.ReadFile(filename)
}
Run Code Online (Sandbox Code Playgroud)
我需要file成为从 S3 拉下来的字符串。我存储的本地文件是 S3 上内容的缓存。
这意味着当我尝试下拉数据时,我需要为该数据创建一个文件。由于我正在使用的数据库,我实际上不知道我正在访问的密钥是否存在。我想知道这些解决方案中的任何一个是否可行:1)创建某种类型的缓冲区对象,将整个文件加载到 RAM 中,而不实际保存它。2) 检查文件是否存在于 S3 上,不创建本地文件。如果文件存在,这将让我拉下文件,而如果我在 S3 上不存在,则不会创建空文件。
抱歉,我无法创建 Playground …
我正在 8 个不同的 goroutine 上运行一个 cpu 密集型脚本。每个 goroutine 都至少需要几分钟才能完成,我想知道这样的事情是否可能:
for i := 0; i < len(input); i += 1 {
wait_for_number_of_processes_running_to_be_less_than_8
go calc_math_and_things(input[i])
}
Run Code Online (Sandbox Code Playgroud) 我有一个点结构,像这样:
#[derive(Clone, Copy, Debug)]
struct Point {
x: i32,
y: i32,
}
Run Code Online (Sandbox Code Playgroud)
我想像这样在点之间迭代:
let start = Point { x: 0, y: 0 };
let end = Point { x: 3, y: 3 };
for p in start..end {
// p should be
// (0, 0)
// (1, 0)
// (2, 0)
// (0, 1)
// (1, 1)
// (2, 1)
// (0, 2)
// etc
}
Run Code Online (Sandbox Code Playgroud)
游乐场。
但是,我似乎无法实现这一点。start..end产生 a Range<Pos>,它是标准库中的一个类型。所以我不能做一个 custom impl Iterator for Range<Pos>,因为这些类型都不在当前的板条箱中。 …