Получить значение INT для переменной "STRING" - PullRequest
2 голосов
/ 16 июня 2019

Мне нужен вывод, как

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     -

Как я могу получить желаемый вывод?

Обновление

Пока я думаю об этом, у меня появляется идея решить ее с помощью массива пустого интерфейса, а затем ввести asserting для каждого элемента массива пустого интерфейса, один раз со строкой, чтобы получить строку,и однажды с int, чтобы получить значение int, но я не знаю, как это сделать.

1 Ответ

2 голосов
/ 16 июня 2019

вы можете использовать карту.

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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...