Почему флаг пакета Go использует указатели? - PullRequest
0 голосов
/ 18 марта 2020

Рассмотрим следующий код из gopl.io/ch2/echo4

package main

import (
    "flag"
    "fmt"
    "strings"
)

var n = flag.Bool("n", false, "omit trailing newline")
var sep = flag.String("s", " ", "separator")

func main() {
    flag.Parse()
    fmt.Print(strings.Join(flag.Args(), *sep))
    if !*n {
        fmt.Println()
    }
}

Мне интересно, почему переменные n и sep являются указателями на флаговые переменные, а не обычный тип переменной.

1 Ответ

3 голосов
/ 18 марта 2020

Это потому, что им нужно присвоить значение после их создания. Порядок действий:

  1. Создать переменную var n = flag.Bool("n", false, "omit trailing newline") Значение теперь равно false.
  2. Назначить значение с помощью flag.Parse(). Переменной теперь присвоено значение, переданное в качестве аргумента командной строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...