如何将 Terraform 字符串集的字符串表示形式转换为字符串片段
How to convert the string representation of a Terraform set of strings to a slice of strings
我有一个 terratest,我从 terraform 得到一个输出,就像这样 s := "[a b]"
。 terraform 输出的 value = toset([resource.name])
,它是一组字符串。
显然 fmt.Printf("%T", s)
returns string。我需要迭代以执行进一步验证。
我尝试了下面的方法但是出错了!
var v interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
fmt.Println(err)
}
我当前转换为切片的实现是:
s := "[a b]"
s1 := strings.Fields(strings.Trim(s, "[]"))
for _, v:= range s1 {
fmt.Println("v -> " + v)
}
寻找有关当前方法的建议或转换为我应该考虑的 arr/slice 的替代方法。感谢任何输入。谢谢。
实际上,您当前的实现似乎还不错。
您不能使用 JSON 解组,因为 JSON 字符串必须用双引号括起来 "
.
而 strings.Fields
就是这样做的,它将字符串拆分为一个或多个匹配 unicode.IsSpace
的字符,即 \t
、\n
、\v
. \f
、\r
和
。
Moeover 如果 terraform 将空集发送为 []
,这也适用,如文档中所述:
returning [...] an empty slice if s contains only white space.
...其中包括 s
完全为空 ""
的情况。
如果您需要对此进行额外控制,可以使用 strings.FieldsFunc
,它接受类型为 func(rune) bool
的函数,因此您可以自己确定什么构成了“space”。但由于您的输入字符串来自 terraform,我想它会表现得足够好。
可能有第三方包已经实现了这个功能,但除非你的程序已经导入了它们,否则我认为基于标准库的原生解决方案总是更可取的。
unicode.IsSpace
实际上还包括更高的符文 0x85
和 0xA0
,在这种情况下 strings.Fields
调用 FieldsFunc(s, unicode.IsSpace)
package main
import (
"fmt"
"strings"
)
func main() {
src := "[a b]"
dst := strings.Split(src[1:len(src)-1], " ")
fmt.Println(dst)
}
我有一个 terratest,我从 terraform 得到一个输出,就像这样 s := "[a b]"
。 terraform 输出的 value = toset([resource.name])
,它是一组字符串。
显然 fmt.Printf("%T", s)
returns string。我需要迭代以执行进一步验证。
我尝试了下面的方法但是出错了!
var v interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
fmt.Println(err)
}
我当前转换为切片的实现是:
s := "[a b]"
s1 := strings.Fields(strings.Trim(s, "[]"))
for _, v:= range s1 {
fmt.Println("v -> " + v)
}
寻找有关当前方法的建议或转换为我应该考虑的 arr/slice 的替代方法。感谢任何输入。谢谢。
实际上,您当前的实现似乎还不错。
您不能使用 JSON 解组,因为 JSON 字符串必须用双引号括起来 "
.
而 strings.Fields
就是这样做的,它将字符串拆分为一个或多个匹配 unicode.IsSpace
的字符,即 \t
、\n
、\v
. \f
、\r
和
。
Moeover 如果 terraform 将空集发送为 []
,这也适用,如文档中所述:
returning [...] an empty slice if s contains only white space.
...其中包括 s
完全为空 ""
的情况。
如果您需要对此进行额外控制,可以使用 strings.FieldsFunc
,它接受类型为 func(rune) bool
的函数,因此您可以自己确定什么构成了“space”。但由于您的输入字符串来自 terraform,我想它会表现得足够好。
可能有第三方包已经实现了这个功能,但除非你的程序已经导入了它们,否则我认为基于标准库的原生解决方案总是更可取的。
unicode.IsSpace
实际上还包括更高的符文 0x85
和 0xA0
,在这种情况下 strings.Fields
调用 FieldsFunc(s, unicode.IsSpace)
package main
import (
"fmt"
"strings"
)
func main() {
src := "[a b]"
dst := strings.Split(src[1:len(src)-1], " ")
fmt.Println(dst)
}