小编dol*_*lan的帖子

如何在 Terraform Framework Plugin 复杂类型和 Golang 类型之间进行转换?

在官方的 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)

go terraform

5
推荐指数
0
解决办法
383
查看次数

仅当 writer 进行更改时,golang 才会阻止 reader

我有一个 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)

我怎样才能做到这一点而不让读者互相阻塞?

concurrency go

3
推荐指数
1
解决办法
1373
查看次数

使用 golang gRPC 客户端拨打多个 IP 地址

我有GRPC服务器192.168.1.12:8800192.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)

go grpc

2
推荐指数
1
解决办法
2532
查看次数

标签 统计

go ×3

concurrency ×1

grpc ×1

terraform ×1