登录
首页 >  Golang >  Go问答

从 ARN 中提取资源 ID

来源:stackoverflow

时间:2024-04-18 16:54:35 465浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《从 ARN 中提取资源 ID》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我在 aws 文档中看到 arn 格式是:

arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id

我正在尝试从 arn 获取 resource-id

下面的代码可以工作,但是很难看......

我正在寻找如何改进它:

func GetResourceNameFromARN(roleARN string) string {
    if parsedARN, err := arn.Parse(roleARN); err == nil {
        return parsedARN.Resource
    }

    return ""
}

func extractResourceId(arn string) string {
    resource := GetResourceNameFromARN(arn)
    switch len(strings.Split(resource, "/")) {
    case 1:
        switch len(strings.Split(resource, ":")) {
        case 2:
            return strings.Split(resource, ":")[1]
        }

    case 2:
        return strings.Split(resource, "/")[1]

    }
    return resource
}

正确答案


我建议使用一个简单的正则表达式:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    // Compile the expression once, usually at init time.
    // Use raw strings to avoid having to quote the backslashes.
    var validID = regexp.MustCompile(`[^:/]*$`)

    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-id"))
    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-type/resource-id"))
    fmt.Println(validID.FindString("arn:partition:service:region:account-id:resource-type:resource-id"))
}

查看演示 here

理论要掌握,实操不能落!以上关于《从 ARN 中提取资源 ID》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>