Golang. Как найти нужный String ?
из помощников книга "Го для чайников".
помощники в наше время уже другие, гляньте пару страниц самой долгоиграющей темы здесь
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
оттуда — тогда окно не закроется автоматически.