我想从结构数组生成一个唯一的散列。顺序可能不同,但值相同。
例子:
type MyStruct struct {
ID string
Parameters map[string]interface{}
}
arr:= []MyStruct{MyStruct{ID: "test", Parameters: map[string]interface{}{"key": true, "key2": "value"} }, MyStruct{ID: "test2", Parameters: map[string]interface{}{"key2": "value", "key": true} }}
//The order is different even inside the Parameters fields
arr:= []MyStruct{MyStruct{ID: "test2", Parameters: map[string]interface{}{"key2": "value", "key": true} },MyStruct{ID: "test", Parameters: map[string]interface{}{"key": true, "key2": "value"} }}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,散列应该相同,因为结构内的值是相同的。
编辑:基本上这个想法是为缓存生成一个唯一的哈希值!我想组合每个结构的单独哈希!
我有 2 个云运行服务:
这个想法是calculator-api公开的,它将向 提出请求add-api。add-api由于某种原因,当ingress 为 时,我收到 403 internal,但如果我将 ingress 更改为 to Allow all traffic,则它可以正常工作。
我使用以下代码正确获取 IdToken,然后将令牌注入 header 中Authorization: Bearer IdToken。我的接收者拥有角色add-api许可。calculator-apiCloud Run Invoker
GET request "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://add-api.a.run.app"
Header: {"Metadata-Flavor", "Google"}
Run Code Online (Sandbox Code Playgroud)
因此,我认为问题不在于身份验证,而在于入口设置为 时的某种网络限制internal。
根据我的理解,类型断言只能在接口中使用,并且基本上检查确定的类型是否实现了接口.
我有一些奇怪的场景:
func binder(value interface{}) {
// Does not work
valueInt, ok := value.(int)
// Works
valueInt, ok := value.(float64)
// Does not work
coordinates, ok := value.([]int)
// Does not work
coordinates, ok := value.([]float64)
}
Run Code Online (Sandbox Code Playgroud)
基本上,我value是一个空的界面,我从一个json.Unmarshall.
场景1
当我传递一个简单的整数时,它不起作用,但如果我检查它是否是一个浮点数它工作...
情景2
当我传递一个int或浮点数组不起作用!正如您在调试时所看到的,我正在接收一个数组,但由于某种原因,断言不起作用.