gpt4 book ai didi

go - 嵌套结构中的访问字段

转载 作者:IT王子 更新时间:2023-10-29 01:27:51 27 4
gpt4 key购买 nike

我在处理本应简单的事情时遇到了麻烦。我正在研究使用 codegangsta 出色的 cli 包的东西,但我试图从嵌套结构访问属性但失败了。

例如,我有:

func Something() []cli.Flag {
return []cli.Flag{
cli.StringFlag{
Name: awesome
Usage: "be awesome"
},
cli.StringFlag{
Name: awesome2
},
<etc.>
}

我有一个函数接受返回的 flags []cli.Flag 并尝试为每个成员打印出 Name 的字符串值,但我不能'似乎无法访问 slice 中的嵌套内容。这样做的正确方法是什么?

编辑:这是我所做的,加上 Mayank 的出色回答

func PrintFlagsForDriver(name string) error {

for driverName := range drivers {
if name == driverName {
driver := drivers[driverName]
flags := driver.GetCreateFlags()
stringFlag, ok := flags[0].(cli.StringFlag)
if ok {
fmt.Println(stringFlag.Name)
}
}
}
return fmt.Errorf("Driver %s not found", name)
}

我现在收到 index out of range 运行时错误,但我认为这是我做错的其他事情。

最佳答案

我假设您正在访问这样的值

package main

import "fmt"
import "github.com/codegangsta/cli"

func main() {

fmt.Println("Hello, playground")
a := Something()
fmt.Printf("%T \n", a[0].Name)
}

func Something() []cli.Flag {
return []cli.Flag{
cli.StringFlag{
Name: "awesome",
Usage: "be awesome",
},
cli.StringFlag{
Name: "awesome2",
},
}
}

这会给你以下错误

./main.go:10: a[0].Name undefined (type cli.Flag has no field or method Name)

此代码的问题在于您正在通过接口(interface) cli.Flag 访问 struct cli.StringFlag 值。您需要将此接口(interface)类型转换为实际的结构类型。

希望下面的代码能让事情变得清晰。

package main

import "fmt"
import "github.com/codegangsta/cli"

func main() {

a := Something()
stringFlag, ok := a[0].(cli.StringFlag)
if ok {
fmt.Println(stringFlag.Name)
}

}

func Something() []cli.Flag {
return []cli.Flag{
cli.StringFlag{
Name: "awesome",
Usage: "be awesome",
},
cli.StringFlag{
Name: "awesome2",
},
}
}

关于go - 嵌套结构中的访问字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com