Golang. Как найти нужный String ?
Вчера открыла для себя Golang, в голове ещё завалялись знания прошлого тысячилетия по программированию.Мечтаю сделать Vokabeltrainer.
1) Как обыскать имеющиеся String и сравнить место 0 с введенным словом? Например andare[0]==wahl1
2) Вообще как лучше сделать базу данных, слов будет около сотни.
3) Как сделать программу с кнопками и окнами? Для Windows und Android.
package main
import ("fmt")
func main() {
avere = [14]string{"avere", "ho", "hai", "ha", "abbiamo", "avete", "hanno", "avrò", "avrai", "avrà", "avremo", "avrete", "avranno", "haben"}
essere = [14]string{"èssere", "sono", "sei", "è", "siamo", "siete", "sanno", "sarò", "sarai", "sarà", "saremo", "sarete", "saranno", "sein"}
andare = [14]string{"andare", "vado", "vai", "va", "andiamo", "andate", "vanno", "andrò", "andrai", "andrà", "andremo", "andrete", "andranno", "gehen oder fahren"}
var wahl1 string
var wahl2 int
fmt.Println("Wählen Sie aus: avere éssere andare")
fmt.Scanln(&wahl1)
fmt.Println("Wählen Sie aus: Presente: 1, Futuro semplice: 7")
fmt.Scanln(&wahl2) // erste Stelle, letzte Stelle= wahl2+5
}
на форуме подобные вещи можно уже не спрашивать, а вести диалог с помощником:
✅ 1. Как сравнить andare[0] == wahl1
В Go массивы и срезы (slice
) работают просто. Чтобы сравнить первый элемент массива со строкой wahl1
, достаточно:
if andare[0] == wahl1 {
fmt.Println("Вы выбрали глагол andare")
}
Но ваш код не компилируется, потому что переменные avere
, essere
, andare
не объявлены. Нужно использовать :=
или var
:
avere := [14]string{...}
essere := [14]string{...}
andare := [14]string{...}
Или лучше — использовать map:
verbs := map[string][14]string{
"avere": {...},
"essere": {...},
"andare": {...},
}
Тогда можно легко обращаться:
if val, ok := verbs[wahl1]; ok {
fmt.Println("Вы выбрали:", val[0])
}
📦 2. Как лучше хранить ~100 слов
Для небольшого количества слов можно:
🔹 Вариант A: JSON-файл
Создайте файл vocab.json
:
{
"avere": ["avere", "ho", "hai", ...],
"essere": ["essere", "sono", "sei", ...]
}
И загрузите его в Go:
import (
"encoding/json"
"os"
)
var verbs map[string][]string
file, _ := os.ReadFile("vocab.json")
json.Unmarshal(file, &verbs)
🔹 Вариант B: SQLite
Если хотите расширяться — используйте SQLite с библиотекой mattn/go-sqlite3. Это даст гибкость: фильтрация, сортировка, статистика.
🖱️ 3. Как сделать GUI с кнопками и окнами
🔸 Для Windows:
- Используйте Fyne — кроссплатформенный GUI-фреймворк на Go.
- Пример:
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Vokabeltrainer")
entry := widget.NewEntry()
button := widget.NewButton("Suchen", func() {
fmt.Println("Вы ввели:", entry.Text)
})
w.SetContent(widget.NewVBox(entry, button))
w.ShowAndRun()
}
🔸 Для Android:
- Go не поддерживает Android напрямую, но можно:
- Написать backend на Go и frontend на Kotlin/Java.
- Или использовать gomobile (ограничено).
- Альтернатива: сделать Web-приложение на Go + HTML/JS и открыть его в WebView на Android.
💡 Бонус: структура проекта
vokabeltrainer/
├── main.go
├── vocab.json
├── gui/ # если используете Fyne
├── db/ # если используете SQLite
└── assets/ # картинки, звуки
на форуме подобные вещи можно уже не спрашивать, а вести диалог с помощником:
из помощников книга "Го для чайников".
if val, ok := verbs[wahl1]; ok
можно это разжувать? что такое if понятно.
func main() {
fmt.Println("Wählen Sie aus: avere andare bere èssere fare") fmt.Scanln(&w1)
fmt.Println("Wählen Sie aus: Presente-1, Futuro semplice-7") fmt.Scanln(&anfang)meinVerb(w1, anfang)
ausgabe()
eingabe()
auswertung()}
если запускаю в VisualStudio, то всё работает, auswertung() до конца всё делает. если запускаю .exe, то окно закрывается само после выполнения eingabe()
что не так?
на форуме подобные вещи можно уже не спрашивать
Если не спрашивать хотя бы такие вещи, то форум загнётся. Щас хоть ИИшников гонять можно, насмехаться над ними, а раньше вообще тут мертвяк был.
из помощников книга "Го для чайников".
помощники в наше время уже другие, гляньте пару страниц самой долгоиграющей темы здесь
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
оттуда — тогда окно не закроется автоматически.
вот поэтому вы и вайбкодер
Уровень ваших выводов здесь уже давно известен. Я вот только только не уверен, что он дотягивает до уровня дет. сада.
Забыли еще кстати, что поэтому и хромаю и поэтому глаза стали квадратными
Я так понимаю, что вы себя мните на другом конце, мне вот только интересно как вы это называете? Что то типа "ручное программирование каменного века"?
Да кончайте вы эти дурацкие картинки копировать!
Да не встревайте, если по теме нечего сказать! Нормальные картинки. Не нравиться, не форматируйте ничего, Вообще без точек и запятых пишите. Нхрн глсн бкв нжн, н пшт х тж.
Просьба не кричать в моей ветке, чувства взаимной неприязни выражайте где-нибудь в другом месте.
Да чего вы в айти все лезете? Нет тут больших денег уже, а в Германии и вообще никогда не было. Идите в иммобилиен маклеры - одна сделка кормит вас весь месяц, а то и два
Да вылезла я оттуда уже лет 15 назад. Это я для себя учу. У каждого своё хобби.
Если нравится обучение на примерах, попробуйте https://exercism.org/tracks/go
А какая ваша конечная цель? Просто для развлечения, тогда конечно делайте как хочется.
Ну да, развлекаю себя как могу. Хочу сделать собственный Vokabeltrainer по своей программе и без рекламы, duolingo мне весь мозг вынес, там и обьяснений никаких. Да я сама лучше сделаю! И со своими картинками
Хочу сделать собственный Vokabeltrainer
ну тоже хорошая идея, но сейчас для этого не обязательно знать программирование. Если можете описать вашу программу, я вам закажу готовое на Го у ИИ, потом сможете корректировать как хотите.
С нулевыми знаниями будет очень проблематично.
The error message "syntax error: non-declaration statement outside function body" in your Go program indicates that you are trying to execute statements outside of a function. In Go, executable code, such as reading a file (os.ReadFile) or unmarshaling JSON (json.Unmarshal), must reside within a function, most commonly func main().
Here's an explanation of the issue and the corrected code:
Reasoning for the Error
In Go, statements like file, _ := os.ReadFile("verbi.json") and json.Unmarshal(file, &verbi) are executable operations. These operations must be enclosed within a function block. Variables declared with var at the package level are declarations and are allowed outside functions, but their assignment or initialization with function calls must happen inside a function.
Corrected Code
To fix this, you need to move the file reading and JSON unmarshaling into the main function.
package main import ( "fmt" "encoding/json" "os" ) var verbi map[string][][]string // This declaration is fine at package level func main() { file, err := os.ReadFile("verbi.json") if err != nil { fmt.Println("Error reading file:", err) return } err = json.Unmarshal(file, &verbi) if err != nil { fmt.Println("Error unmarshaling JSON:", err) return } // You can now use the 'verbi' map here fmt.Println("Successfully loaded 'verbi' data.") // Example of accessing data (assuming structure) // for key, value := range verbi { // fmt.Printf("Key: %s, Value: %v\n", key, value) // } }
Explanation of Changes:
- The file, _ := os.ReadFile("verbi.json") and json.Unmarshal(file, &verbi) lines are now placed inside the func main() {} block.
- Error handling (if err != nil) has been added for both os.ReadFile and json.Unmarshal, which is a good practice in Go to gracefully handle potential issues like a missing file or malformed JSON.
- The var verbi map[string][][]string declaration remains at the package level, making verbi a global variable accessible throughout your package, including within main.
Ну вот что выдало по вашему запросу. Без базы данных будет только для одного пользователя.
Требуется приложение для обучения лексике, которое помогает пользователям изучать новые слова с помощью интерактивных упражнений, использующих данные JSON и визуальные подсказки.
Ваша задача:
Создать комплексную систему обучения лексике, которая:
1. Управляет данными словарного запаса в формате JSON, содержащими:
- Слово/фраза на целевом языке
- Перевод на родной язык пользователя
- Часть речи (существительное, глагол, прилагательное и т. д.)
- Уровень сложности (начальный, средний, продвинутый)
- Пример предложения
- URL связанного изображения или описание
2. Предоставляет интерактивные функции обучения:
- Представляет слова с сопровождающими изображениями для визуального обучения
- Предлагает несколько режимов обучения (флэш-карты, множественный выбор, заполнение пробелов)
- Отслеживает прогресс и результаты пользователя
- Адаптирует сложность в зависимости от успеваемости пользователя
3. Требования к структуре JSON:
{ "vocabulary": [ { "id": "unique_identifier", "target_word": "word in target language", "translation": "word in native language", "part_of_speech": "noun/verb/adjective/etc.", "difficulty": "beginner/intermediate/advanced", "example_sentence": "example usage", "image_url": "path/to/image", "category": "theme/topic" } ] }
Требования к результату:
- Предоставить четкие инструкции по реализации.
- Включить пример данных JSON с не менее чем 10 словарными записями.
- Объяснить, как изображения должны быть интегрированы со словарными записями.
- Описать пользовательский интерфейс и поток взаимодействия.
- Включить механизмы отслеживания прогресса.
Да чего вы в айти все лезете? Нет тут больших денег уже, а в Германии и вообще никогда не было. Идите в иммобилиен маклеры - одна сделка кормит вас весь месяц, а то и дваДа вылезла я оттуда уже лет 15 назад. Это я для себя учу. У каждого своё хобби.
Т.е. вы согласны, что одна сделка кормит месяц, а то и два?
The error message "syntax error: non-declaration statement outside function body" in your Go program indicates that you are trying to execute statements outside of a function. In Go, executable code, such as reading a file (os.ReadFile) or unmarshaling JSON (json.Unmarshal), must reside within a function, most commonly func main().
Here's an explanation of the issue and the corrected code:
Reasoning for the Error
In Go, statements like file, _ := os.ReadFile("verbi.json") and json.Unmarshal(file, &verbi) are executable operations. These operations must be enclosed within a function block. Variables declared with var at the package level are declarations and are allowed outside functions, but their assignment or initialization with function calls must happen inside a function.Corrected Code
To fix this, you need to move the file reading and JSON unmarshaling into the main function.package main import ( "fmt" "encoding/json" "os" ) var verbi map[string][][]string // This declaration is fine at package level func main() { file, err := os.ReadFile("verbi.json") if err != nil { fmt.Println("Error reading file:", err) return } err = json.Unmarshal(file, &verbi) if err != nil { fmt.Println("Error unmarshaling JSON:", err) return } // You can now use the 'verbi' map here fmt.Println("Successfully loaded 'verbi' data.") // Example of accessing data (assuming structure) // for key, value := range verbi { // fmt.Printf("Key: %s, Value: %v\n", key, value) // } }Explanation of Changes:
- The file, _ := os.ReadFile("verbi.json") and json.Unmarshal(file, &verbi) lines are now placed inside the func main() {} block.
- Error handling (if err != nil) has been added for both os.ReadFile and json.Unmarshal, which is a good practice in Go to gracefully handle potential issues like a missing file or malformed JSON.
- The var verbi map[string][][]string declaration remains at the package level, making verbi a global variable accessible throughout your package, including within main.
Нафиг нужны эти ИИ, когда и кожаные мешки неплохо с ответами на вопросы справляются )))
Хочу сделать собственный Vokabeltrainer по своей программе и без рекламы, duolingo мне весь мозг вынес, там и обьяснений никаких.
Херня эти вокабельтрейнеры, если тупо зубрить без использования зазубренного тут же в контексте. А если использовать, то зубрёжка и не нужна. Просто пытайтесь говорить, подсматривайте слова и фразы по мере надобности.
Из бесплатных и без рекламы (по крайней мере года 4 назад) я использовал Anki. Есть сайт и приложение на Андроид - Ankidroid. И словари готовые, или можно самому составлять. Я составлял - заколебался, ибо за ними следить надо, чистить старое, добавлять новое. Проще использовать язык и иногда подсматривать нужные вещи. А поначалу - постоянно подсматривать.
Херня эти вокабельтрейнеры
Это для отвода глаз, чтобы раньше времени поляну не палить! Сейчас вы научите её АППы для телефонов делать и в АПП-сторы загружать, далее прикрутит рекламу или вообще поменяет направление, например магазин витрина.
Каждое слово это перевод + небольшой текст, всунуть туда ссылку на смартконтракт, вот тебе магазин на основе Блокчейн готов:
1 Казахиус-Биткоин = 125 тыщ евро
100 Казахиус = 12,5 миллионов евро
1000 Казахиусов = 125 миллинов евро
Можете сами погуглить Casascius: https://foren.germany.ru/programmer/f/41914717.html

Это для отвода глаз, чтобы раньше времени поляну не палить! Сейчас вы научите её АППы для телефонов делать и в АПП-сторы загружать, далее прикрутит рекламу или вообще поменяет направление, например магазин витрина.
Это точно - мусор в аппсторах после этих вайбкодеров с ИИ увеличится в разы. Я вообще заметил, что единственное крупное достижение ИИ - количество информационного мусора во всех сферах увеличилось многократно, а в некоторых областях - на порядки. Иногда кроме этого мусора и найти реальных стоящих вещей нельзя. И это лишь за последние несколько лет. И ради этого угрохали триллионы и тераватты... Конечно, не ради этого - это лишь ширма, прикрытие. А реальная цель - обогащение кучки избранных и обдирание гораздо большей кучки лохов.
До этого пальму первенства по мусоропроизводству и неээффективности по отношению вложенных средств и полученных результатов был блокчейн и его производные - криптовалюты. Вообще, последние лет 10-15 в айти какой-то "кембрийский взрыв" мошенников и скама. Как бы их потом не стали на кострах сжигать, обвинив во всех проблемах. Причём сжигать будут всех, хотя виноваты лишь вполне конкретные уроды. Ну, вы знаете, как люди охотятся на ведьм - перебьют друг друга, а ведьм толком не поймают. Обычный честный айтишник он вот он - тянет ебатеку на хатку в крупном городе, средств защиты не имеет, уязвимый для быдлонападок интеллигент. Ему по кумполу дай - и собирай выпавший из него лут. А скаммера пойди достань - чилит где-нибудь на тропических островах, сёрфит с утра до вечера.