Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745

Работа с TOML

16.08.2021, 17:46. Показов 3771. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня, форумчане.
Подскажите, как работать с файлами конфигурации TOML?
Сам файл конфигурации
Code
1
2
3
4
5
6
title = "TOML Example"
 
[connection]
Svr = "127.0.0.1"
Dbs = "mydatabase"
Prt = "64000"
Есть структура
Go
1
2
3
4
5
type сonfig struct {
    Svr string
    Dbs string
    Prt string
}
Функция main
Go
1
2
3
4
5
6
7
func main() {
    var cfg сonfig
if _, err := toml.DecodeFile("./cfg.toml", &cfg); err != nil {
        log.Fatal(err)
        return
    }
}
Как мне теперь в структуру загнать данные из конфига в структуру и использовать для соединения с базой данных?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2021, 17:46
Ответы с готовыми решениями:

Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных
Работа в игровом проекте. Работа с php. Работа с платежными системами. Работа с базами данных. Стоимость: Договорная Срок...

Работа с строками,Работа со структурными типами данных,Работа с файлами!!
Помогите написать программы для следующих заданий....буду очень благодарен.) 1)Разработать программу которая удаляет все слова в...

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

10
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
16.08.2021, 18:57
drvolodko,

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type (
    config struct {
        Connection Connection `toml:"connection"`
    }
 
    Connection struct {
        Host   string `toml:"host"`
        Port   int    `toml:"port"`
        DBName string `toml:"dbname"`
    }
)
 
func main() {
    var cfg config
    if _, err := toml.DecodeFile("./cfg.toml", &cfg); err != nil {
        log.Fatal(err)
    }
 
    log.Println(cfg)
}
а дальше подставляешь данные в своё соединение.

Code
1
2
3
4
5
6
title = "TOML Example"
 
[connection]
  host   = "127.0.0.1"
  port   = 64000
  dbname = "mydatabase"
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745
17.08.2021, 09:14  [ТС]
korvin_, спасибо, конечно, огромное, но ключевым вопросом в теме было:
Как мне теперь загнать данные из конфига в структуру и использовать для соединения с базой данных?
Я, конечно, ещё адепт в GO. Только-только начал изучать, но из Вашего ответа я все равно не понял как мне это сделать.

Добавлено через 24 минуты
пробовал так:
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
    var cfg Config
    if _, err := toml.DecodeFile("./cfg.toml", &cfg); err != nil {
        log.Fatal(err)
        return
    }
    conn := Connection{
        Host:   cfg.Connection.Host,
        Port:   cfg.Connection.Port,
        DBName: cfg.Connection.DBName,
    }
    log.Println(conn)
 
}
Результат:
PS D:\Projects\GOLang\Projects\NLVWeb> go run ./cmd/
2021/08/17 09:12:49 { 0 }
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
17.08.2021, 09:44
Лучший ответ Сообщение было отмечено drvolodko как решение

Решение

Цитата Сообщение от drvolodko Посмотреть сообщение
Как мне теперь загнать данные из конфига в структуру и использовать для соединения с базой данных?
Откуда мне знать что у тебя там за база и как происходит соединение с ней?

Цитата Сообщение от drvolodko Посмотреть сообщение
пробовал так:
Цитата Сообщение от drvolodko Посмотреть сообщение
Результат:
PS D:\Projects\GOLang\Projects\NLVWeb> go run ./cmd/
2021/08/17 09:12:49 { 0 }
Очевидно, у тебя определение структуры Config не соответствует структуре твоего toml-файла. Перечитай мой пример ещё раз. Подумай.
1
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745
17.08.2021, 10:24  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
Очевидно, у тебя определение структуры Config не соответствует структуре твоего toml-файла.
Очевидно.
В источниках, которые я читал этого не было описано. Теперь понял.
Данные загрузились. Спасибо.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.08.2021, 12:37
Лучший ответ Сообщение было отмечено Garry Galler как решение

Решение

Цитата Сообщение от drvolodko Посмотреть сообщение
В источниках, которые я читал этого не было описано
Очевидно, что ты использовал BurntSushi/toml (для go есть несколько toml парсеров, но, по сути, они одинаковы, разве что по бенчам для очень больших конфигураций есть разница).
И странно, что ты не увидел кучу примеров: https://github.com/BurntSushi/toml
Кроме того, имена опций из структуры можно переопределять с помощью тегов.

Go
1
2
3
4
5
6
type ownerInfo struct {
    Name string
    Org  string `toml:"organization"`
    Bio  string
    DOB  time.Time
}
Org - в структуре, organization - в конфиге.
То что верхний (capital) регистр имен полей автоматически транслируется в нижний (и наоборот) ты уже должен знать, иначе тебя ждет масса сюрпризов при работе с JSON и БД
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745
18.08.2021, 12:40  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Очевидно, что ты использовал BurntSushi/toml
Да. Всё верно.
Цитата Сообщение от Garry Galler Посмотреть сообщение
И странно, что ты не увидел кучу примеров:
Все эти примеры просмотрены. И не только они. Но вопрос возник не из-за этого.
Как оказалось, проблема была в объявлении структуры. Я делал, как во всех найденных примерах и это не работало. Но, сделав структуру, как рекомендовал korvin_, данные считались.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.08.2021, 14:22
Цитата Сообщение от drvolodko Посмотреть сообщение
. Я делал, как во всех найденных примерах
Не-а, твоя структура не похожа ни на один пример. Поэтому и не работало.

Добавлено через 2 минуты
Еще ты, наверно, не знаешь о трансляции имен полей.
Например, поле ConnectionMax соответствует полю конфига connection_max.
Поэтому, что не зависеть от правил трансляции, лучше сразу задавать соответствие полей вручную через теги.
1
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745
18.08.2021, 14:32  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Не-а, твоя структура не похожа ни на один пример. Поэтому и не работало.
Разве?
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type Config struct {
  Age int
  Cats []string
  Pi float64
  Perfection []int
  DOB time.Time
}
 
func main() {
    var conf Config
    if _, err := toml.DecodeFile("config.toml", &conf); err != nil {
        // обработка ошибки.
    }
}
Это один из многочисленных просмотренных мной примеров. Ну да ладно. Спорить не буду. Язык только изучать начал. Первые шаги так сказать.
В любом случае огромное спасибо за помощь.
Цитата Сообщение от Garry Galler Посмотреть сообщение
Еще ты, наверно, не знаешь о трансляции имен полей.
Да, ты прав. Пока еще не совсем в теме, но кое что об этом уже читал.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.08.2021, 20:02
Цитата Сообщение от drvolodko Посмотреть сообщение
Это один из многочисленных просмотренных мной примеров.
Который нужно было сразу забыть и перейти к другим.
Ну очевидно же (по крайней мере тому, кто хоть когда-нибудь использовал ini), что этот пример описывает очень редко кем используемую бессекционную (несгруппированную) плоскую структуру конфиг файла. Там даже написано For the simplest example (что на русском-программистском означает никогда так не делайте :-)) Я такую вообще никогда не использовал.
Все же прочие примеры описывают нормальный секционированный конфиг.
Так что здесь только невнимательность могла оказать медвежью услугу.

Добавлено через 5 минут
Цитата Сообщение от Garry Galler Посмотреть сообщение
Например, поле ConnectionMax соответствует полю конфига connection_max
Поправлюсь.
Для toml поле ConnectionMax будет соответствовать конфиг-параметру либо сonnectionmax, либо сonnectionMax.
А нижнее подчеркивание в имена полей добавляется в GORM при трансляции полей структуры в поля SQL таблиц.
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 745
19.08.2021, 10:41  [ТС]
Garry Galler, ещё раз спасибо. Буду впредь внимательнее.
В любом случае сразу перейти на новый язык программирования не просто. Так что думаю еще не раз обращусь за помощью
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2021, 10:41
Помогаю со студенческими работами здесь

Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р.
Обязанности - проведение обучающих семинаров по C# Базовый (начальный уровень). Опыт преподавания не обязателен, главное чтобы вы не...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную работу и КПД цикла предыдущей...

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры)
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее отпускаем - она не реагирует. Public...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать новый/очистка). Также хочу спросить как...

Работа с ems api: корректная работа при указании веса.
Здравствуйте! Есть такой код, для работы с ems api (http://www.emspost.ru/ru/corp_clients/dogovor_docements/api/) <!DOCTYPE html...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru