Max
В каком кейсе копирование быстрее переданного указателя на область памяти
V
в плюсах тоже не всегда быстрее
V
int
Max
Daniel
само по себе оно не медленнее
Daniel
но вот окажется переменная в куче или на стеке - зависит от результатов эскейп-анализа
Max
Daniel
а они могут быть разные, в зависимости от способа передачи
Max
Max
Просто заступорило с передачей адреса
Daniel
мы тот докладец подали: http://backendconf.ru/2018/abstracts/3435
Daniel
если примут в программу - будет потом что рассказать
Kirill
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);
Илья
Как бы записать ограничение, чтобы при наличии во вставляемой записи значения (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);
Postgres?
Илья
On conflict do update
Илья
Лок записи и две операции — это будет самый переносимый вариант
Pawel
ну и ограничение там есть - FOREIGN KEY(scenario_id, parent_order) REFERENCES works(scenario_id, work_order) - но почему то не работает
Pawel
Vladislav
Хмм... а как передать значения структуры в шаблон (html/template)?
heavycharged
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
говорю же: "ошибка нуба " :))
Vladislav
Таак... А как это сделать? у меня не получилось. Хотя сейчас уже не помню как пытался
Vladislav
Согласен, что глобальные переменные не хорошо использовать.
Denis
например, ты можешь сделать свой хэндлер не функцией а методом какой-то структуры, а твою мапу - полем структуры. или через замыкание
🎉
Можно глобальные юзать, ибо по другому никак.
Denis
type Some struct {
data map[string]string
}
func (s *Some) handler(http.Reqquest ...) {
// мапа доступна через s.data
}
Denis
🎉
ну что ж ты человеку советуешь-то, а
Ну тады мне посоветуйте как быть, есть var db *sql.DB хочу юзать её везде, ибо коннект делается один раз и закрывается база по завершении аппы, так можно глобальную переменную?
🏁Александр
нет
Alexey
Denis
что значит везде? коннект пусть один раз и делается где-нибудь в мейне. а дальше передавай
🏁Александр
🏁Александр
прокидываешь туда свой коннект
🏁Александр
все экшены от структуры
🏁Александр
= профит