在官方的 Terraform Framework 插件示例中,目前只有涉及简单类型的 CRUD 资源的非常简单的示例。
如果我们使用像地图这样的复杂类型,代码就会变得非常冗长。这就是我目前正在做的事情,但感觉不对。
如果我有一个foo
带有地图属性的资源bar
:
func (r *FooResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
var data *ResourceModel
// Read Terraform prior state data into the model
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)
if resp.Diagnostics.HasError() {
return
}
// call API to get "real" state
foo, err := r.GetFoo(data.Id.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error reading foo",
fmt.Sprintf("Error reading foo: %s", err),
)
return
}
// check to see if real data.Bar is actually different from …
Run Code Online (Sandbox Code Playgroud) 我有一个 writer goroutine 和多个 reader goroutine。我想在作者更改数据时阻止读者。
package main
data []int
func main() {
m := sync.Mutex{}
for i := 0; i< 10; i++ {
go func reader() {
for {
m.Lock()
myData := data
m.Unlock()
read_from_data(myData)
}
}()
}
go func writer() {
for {
newData := new_data()
m.Lock()
data = newData
m.Unlock()
time.Sleep(1 * time.Seconds)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点而不让读者互相阻塞?
我有GRPC服务器192.168.1.12:8800
和192.168.1.13:8800
,我想将它们连接起来使用grpc.Dial
与IP列表,而不是服务器中发现,我该怎么办?
conn, err = grpc.Dial("192.168.1.12:8800,192.168.1.13:8800", grpc.WithInsecure())
Run Code Online (Sandbox Code Playgroud)
有错误
rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp: too many colons in address 192.168.1.12:8800,192.168.1.13:8800
Run Code Online (Sandbox Code Playgroud)