Deutsch

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

723  1 2 все
Феврунья завсегдатай6 дней назад, 19:01
Феврунья
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
NEW 2 дня назад, 20:59 
в ответ AlexNek 6 дней назад, 19:14
на форуме подобные вещи можно уже не спрашивать

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

#5 
AlexNek патриот2 дня назад, 21:43
AlexNek
NEW 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
NEW 2 дня назад, 21:46 
в ответ alex445 2 дня назад, 20:59
Если не спрашивать хотя бы такие вещи, то форум загнётся.

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

#15 
Феврунья завсегдатайВчера, 20:31
Феврунья
Вчера, 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 
AlexNek патриотВчера, 21:39
AlexNek
NEW Вчера, 21:39 
в ответ Феврунья Вчера, 21:25

А какая ваша конечная цель? Просто для развлечения, тогда конечно делайте как хочется.

#21 
AlexNek патриотВчера, 21:47
AlexNek
NEW Вчера, 21:47 
в ответ Феврунья Вчера, 21:25

Если нравится обучение на примерах, попробуйте https://exercism.org/tracks/go

#22 
Феврунья завсегдатайВчера, 21:54
Феврунья
NEW Вчера, 21:54 
в ответ Феврунья Вчера, 21:25, Последний раз изменено Вчера, 21:56 (Феврунья)

Объясните хто-нибудь

#23 
Феврунья завсегдатайВчера, 22:01
Феврунья
NEW Вчера, 22:01 
в ответ AlexNek Вчера, 21:39
А какая ваша конечная цель? Просто для развлечения, тогда конечно делайте как хочется.

Ну да, развлекаю себя как могу. Хочу сделать собственный Vokabeltrainer по своей программе и без рекламы, duolingo мне весь мозг вынес, там и обьяснений никаких. Да я сама лучше сделаю! И со своими картинками улыб

#24 
AlexNek патриотВчера, 22:13
AlexNek
NEW Вчера, 22:13 
в ответ Феврунья Вчера, 22:01
Хочу сделать собственный Vokabeltrainer

ну тоже хорошая идея, но сейчас для этого не обязательно знать программирование. Если можете описать вашу программу, я вам закажу готовое на Го у ИИ, потом сможете корректировать как хотите.

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

#25 
AlexNek патриотВчера, 22:15
AlexNek
NEW Вчера, 22:15 
в ответ Феврунья Вчера, 21:54, Последний раз изменено Вчера, 22:17 (AlexNek)

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.
#26 
AlexNek патриотВчера, 22:33
AlexNek
NEW Вчера, 22:33 
в ответ Феврунья Вчера, 22:01, Последний раз изменено Вчера, 22:36 (AlexNek)

Ну вот что выдало по вашему запросу. Без базы данных будет только для одного пользователя.


Требуется приложение для обучения лексике, которое помогает пользователям изучать новые слова с помощью интерактивных упражнений, использующих данные 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 словарными записями.

- Объяснить, как изображения должны быть интегрированы со словарными записями.

- Описать пользовательский интерфейс и поток взаимодействия.

- Включить механизмы отслеживания прогресса.

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

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

Т.е. вы согласны, что одна сделка кормит месяц, а то и два?

#28 
alex445 патриотСегодня, 00:54
NEW Сегодня, 00:54 
в ответ AlexNek Вчера, 22: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.

Нафиг нужны эти ИИ, когда и кожаные мешки неплохо с ответами на вопросы справляются )))




#29 
alex445 патриотСегодня, 01:00
NEW Сегодня, 01:00 
в ответ Феврунья Вчера, 22:01
Хочу сделать собственный Vokabeltrainer по своей программе и без рекламы, duolingo мне весь мозг вынес, там и обьяснений никаких.

Херня эти вокабельтрейнеры, если тупо зубрить без использования зазубренного тут же в контексте. А если использовать, то зубрёжка и не нужна. Просто пытайтесь говорить, подсматривайте слова и фразы по мере надобности.


Из бесплатных и без рекламы (по крайней мере года 4 назад) я использовал Anki. Есть сайт и приложение на Андроид - Ankidroid. И словари готовые, или можно самому составлять. Я составлял - заколебался, ибо за ними следить надо, чистить старое, добавлять новое. Проще использовать язык и иногда подсматривать нужные вещи. А поначалу - постоянно подсматривать.

#30 
7495 коренной жительСегодня, 05:36
7495
NEW Сегодня, 05:36 
в ответ alex445 Сегодня, 01:00
Херня эти вокабельтрейнеры


Это для отвода глаз, чтобы раньше времени поляну не палить! Сейчас вы научите её АППы для телефонов делать и в АПП-сторы загружать, далее прикрутит рекламу или вообще поменяет направление, например магазин витрина.


Каждое слово это перевод + небольшой текст, всунуть туда ссылку на смартконтракт, вот тебе магазин на основе Блокчейн готов:


1 Казахиус-Биткоин = 125 тыщ евро

100 Казахиус = 12,5 миллионов евро

1000 Казахиусов = 125 миллинов евро


Можете сами погуглить Casascius: https://foren.germany.ru/programmer/f/41914717.html



Вопросы и Ответы - Программируем калькулятор пособий для беженцев вместе.
#31 
alex445 патриотСегодня, 09:03
NEW Сегодня, 09:03 
в ответ 7495 Сегодня, 05:36, Последний раз изменено Сегодня, 09:11 (alex445)
Это для отвода глаз, чтобы раньше времени поляну не палить! Сейчас вы научите её АППы для телефонов делать и в АПП-сторы загружать, далее прикрутит рекламу или вообще поменяет направление, например магазин витрина.

Это точно - мусор в аппсторах после этих вайбкодеров с ИИ увеличится в разы. Я вообще заметил, что единственное крупное достижение ИИ - количество информационного мусора во всех сферах увеличилось многократно, а в некоторых областях - на порядки. Иногда кроме этого мусора и найти реальных стоящих вещей нельзя. И это лишь за последние несколько лет. И ради этого угрохали триллионы и тераватты... Конечно, не ради этого - это лишь ширма, прикрытие. А реальная цель - обогащение кучки избранных и обдирание гораздо большей кучки лохов.


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

#32 
1 2 все