Max
В каком кейсе копирование быстрее переданного указателя на область памяти
V
в плюсах тоже не всегда быстрее
V
int
Max
int
Так мы про строки
Daniel
Это че, не как в плюсах?😟
нет, не как в плюсах. у нас тут эскейп-анализ и GC
Max
нет, не как в плюсах. у нас тут эскейп-анализ и GC
Ок. Тогда как работает взятие адреса и каким боком оно медленнее копирования
Daniel
само по себе оно не медленнее
Daniel
но вот окажется переменная в куче или на стеке - зависит от результатов эскейп-анализа
Daniel
а они могут быть разные, в зависимости от способа передачи
Max
Просто заступорило с передачей адреса
Daniel
мы тот докладец подали: http://backendconf.ru/2018/abstracts/3435
Daniel
если примут в программу - будет потом что рассказать
Vladislav
Доброго времени суток. Нужен совет/наставление. Есть шаблон html/template и есть структура которую нужно вывести в виде таблицы. Но я не понимаю как это сделать. Подскажите, пожалуйста, что нужно написать в func indexHandler(w http.ResponseWriter, r *http.Request) {} чтобы вывести вот это (тут шаблон и сама структура - https://pastebin.com/8dR3hy46 )
Pawel
Как бы записать ограничение, чтобы при наличии во вставляемой записи значения (scenario_id,parent_order), указываемое значение присутствовало в таблице в качестве (scenario_id,work_order)? CREATE TABLE works( scenario_id INTEGER NOT NULL, work_order INTEGER NOT NULL, — порядковый номер parent_order INTEGER, PRIMARY KEY (scenario_id, work_order), FOREIGN KEY(scenario_id, parent_order) REFERENCES works(scenario_id, work_order), — вот это не работает FOREIGN KEY(scenario_id) REFERENCES scenarios(scenario_id), CONSTRAINT order_greater_then_parent CHECK ( work_order > parent_order), CONSTRAINT single_root CHECK ( (work_order = 0) AND (parent_order IS NULL) OR (work_order > 0) AND (parent_order IS NOT NULL ) ) ); чтобы выдавало ошибку,когда например вставляешь в пустую таблицу INSERT INTO works ( scenario_id, parent_order, work_order) VALUES ( 1, 1, 2);
Илья
On conflict do update
Pawel
On conflict do update
хотелось бы без триггеров, ибо sqlite также как вариант рассматриваю
Илья
Лок записи и две операции — это будет самый переносимый вариант
Pawel
ну и ограничение там есть - FOREIGN KEY(scenario_id, parent_order) REFERENCES works(scenario_id, work_order) - но почему то не работает
Vladislav
Хмм... а как передать значения структуры в шаблон (html/template)?
heavycharged
heavycharged
второй параметр - ваша структура
Vladislav
У меня не получается передать значения моей структуры. Наверное что-то делаю не так.
heavycharged
Везде, где возвращается error, прологгируйте
heavycharged
Execute тоже возвращает error
Vladislav
Сделал это всё. у меня скорее всего ошибка до применения шаблонов
Vladislav
А почему она возникает не могу понять - нуб.
heavycharged
если ошибка возникает, она попадет в error. проверьте все функции где возвращается error, и само значение проверяйте и в логи пишите.
heavycharged
есть всего пару случаев, когда программа умирает ничего не сказав, это когда main завершается и вы не ждете завершения горутин
heavycharged
или когда её прибили
Vladislav
Неее, там немного другое. Структура нулевая
Vladislav
https://play.golang.org/p/38htxmcjb40
Vladislav
Я уверен, что ошибка нубская, только я её понять не могу
Vladislav
Сам текст по ссылке, но он в песочнице не запустится
Vladislav
Не могу я его адаптировать к ней
Denis
fmt.Printf("Печать из indexHandler\n%#v\n", *data) а вот это выводит же твои данные?
Vladislav
Нет
Denis
значит проблема не в шаблонах, а в твоих данных. они пустые.
Denis
покажешь LoadServers?
Vladislav
Да там чтение из конфига
Denis
// Servers := LoadServers(serversFileName)
Denis
еще вот эта строчка. тут := а не =
Vladislav
и чтение удачно, что подтверждает следующий принт
Denis
и Servers перекроется(создастся локальная переменная для main),
Denis
а не в глобальную переменную запишется. попробуй Servers = LoadServers
Vladislav
ух ты
Denis
помогло?
Vladislav
cannot use LoadServers(serversFileName) (type map[string]ServerAttr) as type *map[string]ServerAttr in assignment
Vladislav
Не пойму где и какой знак поставить :)
Vladislav
* или &
Vladislav
//LoadServers - Load list of Servers for check thier http-status func LoadServers(nameFile string) map[string]ServerAttr { fmt.Printf("%v Загружаю список серверов из %v", time.Now().Format("15:04:05"), nameFile) cfg, err := ini.Load(nameFile) if err != nil { fmt.Printf("\nОшибка чтения конфигурационного файла: %v", err) os.Exit(1) } fmt.Printf("\t...\tОК\n") Servers := make(map[string]ServerAttr) names := cfg.SectionStrings() var ServerElm ServerAttr for _, name := range names { if name == "DEFAULT" { continue } ServerElm.IP = cfg.Section(name).Key("IP").String() ServerElm.Note = cfg.Section(name).Key("Note").String() ServerElm.SiteID = cfg.Section(name).Key("SiteID").String() Servers[name] = ServerElm } return Servers }
Denis
* - когда ты определяешь тип(возвращаемый функцией, или указываешь тип переменной)
Denis
& - когда берешь адрес уже существующей переменной
Denis
var Servers *map[string]ServerAttr - у тебя указано, что Servers - указатель на мапу
Denis
unc LoadServers(nameFile string) map[string]ServerAttr {
Denis
а функция возвращает просто мапу; ты либо из переменной убери *, либо добавь в контракт функции
Vladislav
А для того чтобы мапа осталась общей как лучше сделать?
Vladislav
Ураааа, помогло.
Denis
👍
Vladislav
говорю же: "ошибка нуба " :))
Denis
А для того чтобы мапа осталась общей как лучше сделать?
лучше не делать глобальных переменных, а передавать эту мапу хэндлеру
Vladislav
Таак... А как это сделать? у меня не получилось. Хотя сейчас уже не помню как пытался
Vladislav
Согласен, что глобальные переменные не хорошо использовать.
Denis
например, ты можешь сделать свой хэндлер не функцией а методом какой-то структуры, а твою мапу - полем структуры. или через замыкание
🎉
Можно глобальные юзать, ибо по другому никак.
Denis
type Some struct { data map[string]string } func (s *Some) handler(http.Reqquest ...) { // мапа доступна через s.data }
Denis
Можно глобальные юзать, ибо по другому никак.
ну что ж ты человеку советуешь-то, а
🎉
ну что ж ты человеку советуешь-то, а
Ну тады мне посоветуйте как быть, есть var db *sql.DB хочу юзать её везде, ибо коннект делается один раз и закрывается база по завершении аппы, так можно глобальную переменную?
🏁Александр
нет
Denis
что значит везде? коннект пусть один раз и делается где-нибудь в мейне. а дальше передавай
🏁Александр
прокидываешь туда свой коннект
🏁Александр
все экшены от структуры
🏁Александр
= профит