Oleg
не "встроил", а "имплементировал", сказал бы Павел
Pavel
но не сказал
hdhog
мужики) а подскажите как по следующему вопросу. можно как то "вытащить" требуемые переменные для шаблона text/template? в дока чет про это ничего нет
Oleg
Типа из шаблона {{ .Value1 }} - {{ .Value2 }} вытащить "Value1" и "Value2" да?
hdhog
да
hdhog
то есть у меня есть шаблоны. перед заполнением шаблона я хочу запросить ввод переменных. сам собой переменные разные
hdhog
в разных шаблонах
hdhog
какой то логики в шаблоне не планируется пока)
Oleg
Лучше где-то дописывать рядом с самим шаблоном, какие переменные ему нужны. Потому что, походу, иначе как проходом по дереву парсинга переменные не вытащить. Вроде такого: type MyTemplate struct { Tmpl *text.Template Values []string }
hdhog
затем что без заданных переменных шаблон будет не верно обработан. а так как шаблоны с разным набором переменных. нужно и запрашивать переменне динамически.
Aleksandr
затем что без заданных переменных шаблон будет не верно обработан. а так как шаблоны с разным набором переменных. нужно и запрашивать переменне динамически.
не понятен кейс. у вас шаблон рулит слоем выше, или наоборот контроллер рулит шаблоном? почему нельзя нужный шаблон выбрать при приходе каких-то данных? может и есть какая-то логика, но выглядит это извратом
hdhog
а кейс прост. в шаблоне каркас скрипта, как не прискорбно это cmd\bat. чтобы данный скрит подготовить к запуску на ПК. нужно задать некоторые переменные. имя пк например\ имя сервера куда писать логи.
hdhog
а так как скрипт будет испольняться на множестве компов. для каждолго из них могут быть свои значения переменных. которые сам ПК знать не может
Oleg
Множество возможных переменных как-то ограничено? Или структуры нет никакой?
Aleksandr
ну логично. но почему в шаблоне разные переменные? почему нельзя if'ов наделать итд, и подавать в шаблон стандартную структуру?
Aleksandr
у вас что, на разные компьютеры разные шаблоны?
hdhog
у вас что, на разные компьютеры разные шаблоны?
да, вполне. один скрипт должен збрать лог из пути в котором есть имя ПК или версии ПО. на разных ПК разная версия например. или тот же лог в другом месте. так же для разных пк всегда разные сервера с логами. точнее для групп пк
Oleg
сами переменные тупо строки. не более того.
Я имею ввиду, их можно перечислить? :) 1. PCName 2. UserName 3. LogPath 4. ... Потому что в таком случае можно передавать все возможные переменные сразу, все вместе.
hdhog
нет. не получится перечислить.
hdhog
если нужно будет задать переменную которой нет в подгтовленном наборе? тогда что править исходники приложения?)
Мерль
нет. не получится перечислить.
Как задаются эти строки? Откуда берутся переменные
Мерль
их задает пользователь.
Тогда в чём проблема сохранить их копии в структуре?
Мерль
В слайсе, например?
Aleksandr
их задает пользователь.
то есть у вас есть заданный набор переменных в шаблонах, которые уже скопилированы, но почему-то нельзя к этому заданному набору привязать одну структуру.
hdhog
не проблема. шаблон сейчас описывается в yaml. туда можно конечно добавить список требуемых переменных отдельным полем. но тогда есть вероятность того, когда будут готовить шаблон могут забыть указать переменную.
hdhog
по этому и был вопрос как из шаблона вытащить переменные которые он использует.
hdhog
именно
hdhog
то есть в идеале хотелось нечто такое получить app --template tmpl.yml --name app --address test а в шаблоне уже start {{.app}} {{.address}}
Oleg
А вдруг подсунут start {{ .template }}? :))
hdhog
да полюбому подсунут 😄
hdhog
так и делаю)
hdhog
его надо ведь заполнить правильно ;) чтобы ключи верные были.
hdhog
думал об этом. как запасной вариант
Илья
https://golang.org/pkg/text/template/parse/
Илья
куда то туда копать
engelbart
Что то я забыл как математика нам завещала float64 сравнивать на близость
engelbart
вариант с abs < tolerance мне не нравится потому что там масштабы разные бывают
Илья
var EPSILON float64 = 0.00000001 func floatEquals(a, b float64) bool { if ((a - b) < EPSILON && (b - a) < EPSILON) { return true } return false }
engelbart
Mike серьезно?
engelbart
в жизни такого не видел
Mike
Не, шутки шучу
Mike
Серьезно это как выше
engelbart
с епсилоном то ясно
engelbart
но я его угадать не могу, у меня там 10^-9 бывает и 10^9
engelbart
ну смотри, сравниваем два float в один проход там десятьв деввятой значения
engelbart
в другой проход десятьв минус девятой
engelbart
данные разные
engelbart
а эпислон 1
Илья
для 10-9 придется кастомныйй кейс лепить
engelbart
я вот думал есть какой нитьь общепринятый способ, вычислить эпсилон налету
engelbart
или хоть размышления какие
Илья
но я не сталкивался с такими задачами и не плодил таких общих решений
engelbart
буду епсилон высчитывать как max / 10^5
engelbart
типа пять знаков сопадает и баста
Mike
ну вообще одного должно хватать, ошибка-то обычно не относительная, а абсолютная, и она где-то знаке в 9-10 максимум должна быть, иначе не равны
Mike
просто флоаты близкие к нулю это ж вообще трэш тот еще, когда они сами имеют порядок ошибки при умножении/делении
engelbart
всё так
Сережа
Float - 7 значащих цифр, double - 15. Насколько float'ы близки к нулю - не имеет значения. Есть минимальное принимаемое значение. Ошибка не абсолютная. Регламентировано стандартом IEEE754.
Сережа
я ваш го не знаю
Mike
догадайся из названия типов, в чем суть
Mike
таки погоди, ты сейчас взял стандарт хз чего
Сережа
float64 видимо соотвествует числу с плавающей точкой с двойной точностью
Mike
го не знаешь
Mike
и что-то утверждаешь?