获取“ STRING”变量的INT值

时间:2019-06-16 13:33:58

标签: go

我需要类似的输出

0 - os.O_APPEND     - 1024
1 - os.O_CREATE     - 64
2 - os.O_EXCL       - 128
3 - os.O_RDONLY     - 0
4 - os.O_RDWR       - 2
5 - os.O_SYNC       - 1052672
6 - os.O_TRUNC      - 512
7 - os.O_WRONLY     - 1

我可以用

完成一半
func main() {
        a := []int{os.O_APPEND,os.O_CREATE,os.O_EXCL,os.O_RDONLY,os.O_RDWR,os.O_SYNC,os.O_TRUNC,os.O_WRONLY}
        for index, value := range a {
                fmt.Printf("%d -  - %d\n", index, value)
        }
}

这给了我输出

0 -  - 1024
1 -  - 64
2 -  - 128
3 -  - 0
4 -  - 2
5 -  - 1052672
6 -  - 512
7 -  - 1

,另一半与

func main() {
        a := []string{"os.O_APPEND","os.O_CREATE","os.O_EXCL","os.O_RDONLY","os.O_RDWR","os.O_SYNC","os.O_TRUNC","os.O_WRONLY"}
        for index, value := range a {
                fmt.Printf("%d - %-15s -\n", index, value)
        }
}

这给了我输出

0 - os.O_APPEND     -
1 - os.O_CREATE     -
2 - os.O_EXCL       -
3 - os.O_RDONLY     -
4 - os.O_RDWR       -
5 - os.O_SYNC       -
6 - os.O_TRUNC      -
7 - os.O_WRONLY     -

如何获得所需的输出?

更新

在考虑这个问题时,我得到了一个解决方案:使用一个空接口数组解决该问题,然后在该空接口数组的每个元素上键入断言,一次使用string获取该字符串,一次用int来获取int的值,但是我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

您可以使用地图。

func main() {
    var m map[string]int
    m = make(map[string]int)
    b := []int{os.O_APPEND,os.O_CREATE,os.O_EXCL,os.O_RDONLY,os.O_RDWR,os.O_SYNC,os.O_TRUNC,os.O_WRONLY}
    a := []string{"os.O_APPEND","os.O_CREATE","os.O_EXCL","os.O_RDONLY","os.O_RDWR","os.O_SYNC","os.O_TRUNC","os.O_WRONLY"}
    for index, value := range a {
        m[value] = b[index]
    }
    var i =0
    for index,mapValue := range m{
        fmt.Println(i," - ",index,"-",mapValue )
        i++
    }
}

输出将是:

0  -  os.O_RDWR - 2
1  -  os.O_SYNC - 1052672
2  -  os.O_TRUNC - 512
3  -  os.O_WRONLY - 1
4  -  os.O_APPEND - 1024
5  -  os.O_CREATE - 64
6  -  os.O_EXCL - 128
7  -  os.O_RDONLY - 0

或者您可以定义自定义结构

type CustomClass struct {
    StringValue string
    IntValue int
}
func main() {

    CustomArray:=[]CustomClass{
        {"os.O_APPEND",os.O_APPEND},
        {"os.O_CREATE",os.O_CREATE},
        {"os.O_EXCL",os.O_EXCL},
        {"os.O_RDONLY",os.O_RDONLY},
        {"os.O_RDWR",os.O_RDWR},
        {"os.O_SYNC",os.O_SYNC},
        {"os.O_TRUNC",os.O_TRUNC},
        {"os.O_WRONLY",os.O_WRONLY},
    }
    for k, v := range CustomArray {
        fmt.Println(k," - ", v.StringValue," - ", v.IntValue)
    }
}