Вопрос о синтаксисе GoLang / Mux: if ID, Ok = mux.Vars (r) ["ID"];!Хорошо - PullRequest
0 голосов
/ 28 июня 2019

Я очень новичок в Golang и читаю чей-то код для API с использованием gorilla / mux, и я наткнулся на этот блок кода.

func heroGet(w http.ResponseWriter, r *http.Request) {
    var ID string
    var Ok bool
    if ID, Ok = mux.Vars(r)["ID"]; !Ok{
        //do something
    }

У меня проблемы с пониманием того, что Ok делает в этой конкретной ситуации и когда срабатывает !Ok.

Обратите внимание, что эта функция является GET конечной точкой.

(r.HandleFunc("/hero/{ID}", heroGet).Methods("GET"))

1 Ответ

1 голос
/ 28 июня 2019

Полагаю, вы используете гориллу мукс. Я проверил исходный код , mux.Vars() возвращает значение с типом map[string]string.

В двух словах, тип данных map может при желании возвращать два значения.

  1. Первым является фактическое значение согласно запрошенному ключу
  2. Второй индикатор показывает, существует элемент с запрошенным ключом или нет (логическое значение).

Пожалуйста, посмотрите на пример ниже:

vars := map[string]string{
    "one": "1",
    "two": "",
}

value1, ok1 := vars["one"]
fmt.Println("value:", value1, "is exists:", ok1)
// value: 1 is exists: true

value2, ok2 := vars["two"]
fmt.Println("value:", value2, "is exists:", ok2)
// value:  is exists: true

value3, ok3 := vars["three"]
fmt.Println("value:", value3, "is exists:", ok3)
// value:  is exists: false

Из приведенного выше примера ясно видно, что если запрошенный элемент не существует, то второе возвращение будет false.

Если элемент существует, даже если значение равно нулю, то второе возвращение все равно будет true, поскольку элемент действительно существует, не обязательно важно, какое значение.

...