go - 如何在函数中将字符串值转换为自定义类型
问题描述
我编写了一个用于角色检查的函数:
...
role = "roles/cloudkms.publicKeyViewer"
func checkRole(key, serviceAccount, role string) bool {
...
return policy.HasRole(serviceAccount, role)
}
然后我收到错误“不能在 policy.HasRole 的参数中使用角色(类型字符串)作为类型“cloud.google.com/go/iam”.RoleName。
将角色值转换为自定义类型的正确方法是什么?
图书馆:
// A RoleName is a name representing a collection of permissions.
type RoleName string
// Common role names.
const (
Owner RoleName = "roles/owner"
Editor RoleName = "roles/editor"
Viewer RoleName = "roles/viewer"
)
const (
// AllUsers is a special member that denotes all users, even unauthenticated ones.
AllUsers = "allUsers"
// AllAuthenticatedUsers is a special member that denotes all authenticated users.
AllAuthenticatedUsers = "allAuthenticatedUsers"
)
// HasRole reports whether member has role r.
func (p *Policy) HasRole(member string, r RoleName) bool {
return memberIndex(member, p.binding(r)) >= 0
}
解决方案
您可以使用类型转换,如下所示:
return policy.HasRole(serviceAccount, iam.RoleName(role))
或者通过将角色声明为更简单iam.RoleName
func checkRole(key, serviceAccount, role iam.RoleName) bool {
...
return policy.HasRole(serviceAccount, role)
}
推荐阅读
- php - PHP SQLite - Not returning correct count of match
- r - 在 R 中创建或初始化一个空矩阵
- java - Java OutputStream that incrementally processes text
- c++ - Boost 为 ode 集成提供了奇怪的结果
- python - 新的 Python 安装 - Openpyxl 不会导入“工作表”
- d3.js - 如何在具有多个路径的 SVG 中应用 clipPath,而不是剪掉路径之间的区域?
- python - 我需要在 Python 中生成 1000 个唯一的名字
- security - 非组织成员可以利用 Google 客户端 ID 和客户端机密凭据吗?
- vue.js - Vue路由器上的可选参数
- python - Cython C++ 缓存 - 如何清除