
Makkusu
12.04.2018
07:43:42
если их много и это конфиг то лучше сделать структуру конфига

V
12.04.2018
07:44:04
При использовании глобальных переменных дольше стартовать чуток будет. Другое дело, что связанность кода увеличивается.

Max
12.04.2018
07:44:34
А если по значению?
А тогда какая разница, если ты ее все время копируешь ? Никакого отличия от прямой передачи строки в функции тут нет

Google

Max
12.04.2018
07:45:15

Никита
12.04.2018
07:45:23

Max
12.04.2018
07:45:43

V
12.04.2018
07:46:24
Смотря какой длины Ваша строка, т.е. сколько памяти под нее требуется заполнить. Но лучше все равно не делать так.

Max
12.04.2018
07:47:09
Тут как бы нет интернирования строк, так что ...

Daniel
12.04.2018
07:53:38

Max
12.04.2018
07:54:02
нет
Это че, не как в плюсах??
В каком кейсе копирование быстрее переданного указателя на область памяти

V
12.04.2018
07:54:41
в плюсах тоже не всегда быстрее
int

Max
12.04.2018
07:55:03

Daniel
12.04.2018
07:56:38

Max
12.04.2018
07:57:50

Google

Daniel
12.04.2018
07:58:17
само по себе оно не медленнее
но вот окажется переменная в куче или на стеке - зависит от результатов эскейп-анализа

Max
12.04.2018
07:59:03

Daniel
12.04.2018
07:59:07
а они могут быть разные, в зависимости от способа передачи

Max
12.04.2018
07:59:23
Просто заступорило с передачей адреса

Daniel
12.04.2018
08:00:06
мы тот докладец подали: http://backendconf.ru/2018/abstracts/3435
если примут в программу - будет потом что рассказать

Kirill
12.04.2018
08:01:00

Vladislav
12.04.2018
08:04:32
Доброго времени суток. Нужен совет/наставление.
Есть шаблон html/template и есть структура которую нужно вывести в виде таблицы. Но я не понимаю как это сделать.
Подскажите, пожалуйста, что нужно написать в
func indexHandler(w http.ResponseWriter, r *http.Request) {} чтобы вывести вот это (тут шаблон и сама структура - https://pastebin.com/8dR3hy46 )


Pawel
12.04.2018
09:20:51
Как бы записать ограничение, чтобы при наличии во вставляемой записи значения (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);


Илья
12.04.2018
09:28:27
Как бы записать ограничение, чтобы при наличии во вставляемой записи значения (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
12.04.2018
09:29:20

Илья
12.04.2018
09:30:04
Лок записи и две операции — это будет самый переносимый вариант

Pawel
12.04.2018
09:30:20
ну и ограничение там есть - FOREIGN KEY(scenario_id, parent_order) REFERENCES works(scenario_id, work_order) - но почему то не работает

Vladislav
12.04.2018
10:54:29
Хмм... а как передать значения структуры в шаблон (html/template)?

The
12.04.2018
10:58:56

Google

The
12.04.2018
10:59:47
второй параметр - ваша структура

Vladislav
12.04.2018
11:00:15
У меня не получается передать значения моей структуры. Наверное что-то делаю не так.

The
12.04.2018
11:01:14
Везде, где возвращается error, прологгируйте
Execute тоже возвращает error

Vladislav
12.04.2018
11:04:29
Сделал это всё. у меня скорее всего ошибка до применения шаблонов
А почему она возникает не могу понять - нуб.

The
12.04.2018
11:05:32
если ошибка возникает, она попадет в error. проверьте все функции где возвращается error, и само значение проверяйте и в логи пишите.
есть всего пару случаев, когда программа умирает ничего не сказав, это когда main завершается и вы не ждете завершения горутин
или когда её прибили

Vladislav
12.04.2018
11:06:33
Неее, там немного другое. Структура нулевая
https://play.golang.org/p/38htxmcjb40
Я уверен, что ошибка нубская, только я её понять не могу
Сам текст по ссылке, но он в песочнице не запустится
Не могу я его адаптировать к ней

Denis
12.04.2018
11:09:26
fmt.Printf("Печать из indexHandler\n%#v\n", *data) а вот это выводит же твои данные?

Vladislav
12.04.2018
11:09:46
Нет

Denis
12.04.2018
11:10:04
значит проблема не в шаблонах, а в твоих данных. они пустые.
покажешь LoadServers?

Vladislav
12.04.2018
11:10:57
Да там чтение из конфига

Denis
12.04.2018
11:11:02
// Servers := LoadServers(serversFileName)

Google

Denis
12.04.2018
11:11:09
еще вот эта строчка. тут := а не =

Vladislav
12.04.2018
11:11:16
и чтение удачно, что подтверждает следующий принт

Denis
12.04.2018
11:11:22
и Servers перекроется(создастся локальная переменная для main),
а не в глобальную переменную запишется. попробуй Servers = LoadServers

Vladislav
12.04.2018
11:11:45
ух ты

Denis
12.04.2018
11:13:44
помогло?

Vladislav
12.04.2018
11:14:28
cannot use LoadServers(serversFileName) (type map[string]ServerAttr) as type *map[string]ServerAttr in assignment
Не пойму где и какой знак поставить :)
* или &
//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
12.04.2018
11:15:07
* - когда ты определяешь тип(возвращаемый функцией, или указываешь тип переменной)
& - когда берешь адрес уже существующей переменной
var Servers *map[string]ServerAttr - у тебя указано, что Servers - указатель на мапу
unc LoadServers(nameFile string) map[string]ServerAttr {
а функция возвращает просто мапу; ты либо из переменной убери *, либо добавь в контракт функции

Vladislav
12.04.2018
11:17:11
А для того чтобы мапа осталась общей как лучше сделать?
Ураааа, помогло.

Denis
12.04.2018
11:18:27
?

Vladislav
12.04.2018
11:18:58
говорю же: "ошибка нуба " :))

Denis
12.04.2018
11:19:05

Google

Vladislav
12.04.2018
11:19:32
Таак... А как это сделать? у меня не получилось. Хотя сейчас уже не помню как пытался
Согласен, что глобальные переменные не хорошо использовать.

Denis
12.04.2018
11:21:08
например, ты можешь сделать свой хэндлер не функцией а методом какой-то структуры, а твою мапу - полем структуры. или через замыкание

Marlik
12.04.2018
11:21:27
Можно глобальные юзать, ибо по другому никак.

Denis
12.04.2018
11:21:45
type Some struct {
data map[string]string
}
func (s *Some) handler(http.Reqquest ...) {
// мапа доступна через s.data
}

Marlik
12.04.2018
11:23:44
ну что ж ты человеку советуешь-то, а
Ну тады мне посоветуйте как быть, есть var db *sql.DB хочу юзать её везде, ибо коннект делается один раз и закрывается база по завершении аппы, так можно глобальную переменную?

Александр
12.04.2018
11:24:10
нет

Алексей
12.04.2018
11:24:11

Denis
12.04.2018
11:24:12
что значит везде? коннект пусть один раз и делается где-нибудь в мейне. а дальше передавай

Александр
12.04.2018
11:24:31
прокидываешь туда свой коннект
все экшены от структуры
= профит

Marlik
12.04.2018
11:25:17