Deutsch

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

526  1 2 все
Феврунья завсегдатай6 дней назад, 19:01
Феврунья
NEW 6 дней назад, 19:01 

Вчера открыла для себя 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 
AlexNek патриот6 дней назад, 19:14
AlexNek
NEW 6 дней назад, 19:14 
в ответ Феврунья 6 дней назад, 19:01

на форуме подобные вещи можно уже не спрашивать, а вести диалог с помощником:

✅ 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/      # картинки, звуки


#2 
Феврунья завсегдатай2 дня назад, 19:51
Феврунья
NEW 2 дня назад, 19:51 
в ответ AlexNek 6 дней назад, 19:14
на форуме подобные вещи можно уже не спрашивать, а вести диалог с помощником:

из помощников книга "Го для чайников".

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()

что не так?

#3 
alex445 патриот2 дня назад, 20:50
NEW 2 дня назад, 20:50 
в ответ Феврунья 2 дня назад, 19:51

Да чего вы в айти все лезете? Нет тут больших денег уже, а в Германии и вообще никогда не было. Идите в иммобилиен маклеры - одна сделка кормит вас весь месяц, а то и два.

#4 
alex445 патриот2 дня назад, 20:59
2 дня назад, 20:59 
в ответ AlexNek 6 дней назад, 19:14
на форуме подобные вещи можно уже не спрашивать

Если не спрашивать хотя бы такие вещи, то форум загнётся. Щас хоть ИИшников гонять можно, насмехаться над ними, а раньше вообще тут мертвяк был.

#5 
AlexNek патриот2 дня назад, 21:43
AlexNek
2 дня назад, 21:43 
в ответ Феврунья 2 дня назад, 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 оттуда — тогда окно не закроется автоматически.


#6 
AlexNek патриот2 дня назад, 21:46
AlexNek
2 дня назад, 21:46 
в ответ alex445 2 дня назад, 20:59
Если не спрашивать хотя бы такие вещи, то форум загнётся.

так уже и загнулся, гораздо проще обсудить всё немедленно и сразу, чем ждать ответа на форуме

#7 
alex445 патриот2 дня назад, 22:01
2 дня назад, 22:01 
в ответ AlexNek 2 дня назад, 21:43, Последний раз изменено 2 дня назад, 22:02 (alex445)

Да кончайте вы эти дурацкие картинки копировать! зло


И форум этот дурацкий. Позволяет вставлять их со всем форматированием.

#8 
AlexNek патриот2 дня назад, 22:06
AlexNek
2 дня назад, 22:06 
в ответ alex445 2 дня назад, 22:01

давать Вам тексты на проверку, чтобы сами всё удаляли? Если не забуду попрошу без картинок, но мне нравится с картинками смущ

#9 
alex445 патриот2 дня назад, 22:19
2 дня назад, 22:19 
в ответ AlexNek 2 дня назад, 22:06, Последний раз изменено 2 дня назад, 22:19 (alex445)

Вы пробовали программировать на Лабвью, блупринтах или создавать иерархии классов в UML с нуля? Может вам оно лучше зайдёт, чем текст?

#10 
AlexNek патриот2 дня назад, 22:28
AlexNek
2 дня назад, 22:28 
в ответ alex445 2 дня назад, 22:19

мне всегда картинки лучше текста смущ

#11 
alex445 патриотВчера, 00:39
Вчера, 00:39 
в ответ AlexNek 2 дня назад, 22:28

вот поэтому вы и вайбкодер ))

#12 
AlexNek патриотВчера, 09:55
AlexNek
NEW Вчера, 09:55 
в ответ alex445 Вчера, 00:39
вот поэтому вы и вайбкодер

Уровень ваших выводов здесь уже давно известен. Я вот только только не уверен, что он дотягивает до уровня дет. сада.

Забыли еще кстати, что поэтому и хромаю и поэтому глаза стали квадратными бебе


Я так понимаю, что вы себя мните на другом конце, мне вот только интересно как вы это называете? Что то типа "ручное программирование каменного века"?

#13 
alex445 патриотВчера, 14:04
NEW Вчера, 14:04 
в ответ AlexNek Вчера, 09:55
хромаю и глаза стали квадратными бебе

Не знал о вас таких подробностей. Сочувствую.


Я так понимаю, что вы себя мните на другом конце, мне вот только интересно как вы это называете? Что то типа "ручное программирование каменного века"?

юрского периода

#14 
Феврунья завсегдатайВчера, 20:27
Феврунья
NEW Вчера, 20:27 
в ответ alex445 2 дня назад, 22:01, Последний раз изменено Вчера, 20:32 (Феврунья)
Да кончайте вы эти дурацкие картинки копировать!

Да не встревайте, если по теме нечего сказать! Нормальные картинки. Не нравиться, не форматируйте ничего, Вообще без точек и запятых пишите. Нхрн глсн бкв нжн, н пшт х тж.


Просьба не кричать в моей ветке, чувства взаимной неприязни выражайте где-нибудь в другом месте.

#15 
Феврунья завсегдатайВчера, 20:31
Феврунья
NEW Вчера, 20:31 
в ответ alex445 2 дня назад, 20:50
Да чего вы в айти все лезете? Нет тут больших денег уже, а в Германии и вообще никогда не было. Идите в иммобилиен маклеры - одна сделка кормит вас весь месяц, а то и два

Да вылезла я оттуда уже лет 15 назад. Это я для себя учу. У каждого своё хобби.

#16 
Феврунья завсегдатайВчера, 20:35
Феврунья
NEW Вчера, 20:35 
в ответ AlexNek 2 дня назад, 22:28
мне всегда картинки лучше текста

Спасибо и за картинки и за текст. будет мне чем заняться на выходных

#17 
AlexNek патриотВчера, 21:13
AlexNek
NEW Вчера, 21:13 
в ответ Феврунья Вчера, 20:35
будет мне чем заняться на выходных
ну успехов. Хотя похоже вы пытаетесь учить язык не зная программирования.
#18 
AlexNek патриотВчера, 21:16
AlexNek
NEW Вчера, 21:16 
в ответ alex445 Вчера, 14:04
Сочувствую.

Просили же не строить из себя идиота спок

В первый раз может было бы и смешно, но когда постоянно безум

#19 
Феврунья завсегдатайВчера, 21:25
Феврунья
NEW Вчера, 21:25 
в ответ AlexNek Вчера, 21:13
вы пытаетесь учить язык не зная программирования

В общем да. Состряпала пару простых страниц в JS und HTML, а потом только photoshop, quarkxpress и что там ещё было по графике.

#20 
1 2 все