русский

Golang. Как найти нужный String ?

2 Tage zurück, 21:43
Re: Golang. Как найти нужный String ?
 
AlexNek патриот
AlexNek
in Antwort Феврунья 2 Tage zurück, 19:51
из помощников книга "Го для чайников".

помощники в наше время уже другие, гляньте пару страниц самой долгоиграющей темы здесь

if val, ok := verbs[wahl1]; ok 

Эта конструкция типична для Go и называется "comma ok idiom" — используется при проверке наличия ключа в map.


🧩 Разбор строки

if val, ok := verbs[wahl1]; ok {
    // тело if
}

🔧 Что такое verbs[wahl1]?

  • verbs — это map, то есть словарь: map[string]string или map[string]VerbStruct, например.
  • wahl1 — это ключ, который ты получил от пользователя.
  • verbs[wahl1] — попытка получить значение по ключу wahl1.

🧠 Что делает val, ok := verbs[wahl1]?

  • val — значение, которое хранится по ключу wahl1, если он есть.
  • ok — булево значение (true или false), которое показывает, нашёлся ли ключ.

🔍 Как это работает

  • Если wahl1 есть в verbs, то:
    • val будет значением из словаря.
    • ok будет true.
  • Если wahl1 нет в verbs, то:
    • val будет нулевым значением (например, "" или nil).
    • ok будет false.

✅ Пример

verbs := map[string]string{
    "avere": "haben",
    "essere": "sein",
}

wahl1 := "avere"

if val, ok := verbs[wahl1]; ok {
    fmt.Println("Gefunden:", val)
} else {
    fmt.Println("Nicht gefunden")
}

Вывод:

Gefunden: haben

Если бы wahl1 := "fare", то было бы:

Nicht gefunden

🧠 Почему это удобно?

  • Без ok, ты не узнаешь, есть ли ключ — и можешь случайно работать с nil или пустыми значениями.
  • Это безопасный способ обращаться к map.


если запускаю в VisualStudio, то всё работает, auswertung() до конца всё делает. если запускаю .exe, то окно закрывается само после выполнения eingabe()что не так?

главное забудьте немецкий для программирования и учите английский.



🧨 Почему .exe закрывается сразу?

Когда запускаешь .exe напрямую (двойной клик), консоль открывается, выполняет программу, и сразу закрывается, как только main() завершился.

Если eingabe() — это последний ввод, и после него auswertung() завершает работу, то окно консоли просто закрывается, не давая увидеть результат.


✅ Как это исправить

Добавь ожидание ввода в конце, чтобы окно не закрылось сразу:

fmt.Println("Drücken Sie die Eingabetaste zum Beenden...")
fmt.Scanln()

Или просто:

var dummy string
fmt.Scanln(&dummy)

Это заставит программу ждать, пока ты нажмёшь Enter — и окно не закроется сразу.


🛠 Альтернатива: запуск через cmd

Если ты хочешь запускать .exe и видеть результат, открой командную строку (cmd) вручную и запусти .exe оттуда — тогда окно не закроется автоматически.


 

Sprung zu