@proGO

Страница 1547 из 1674
Александр
03.07.2018
11:28:53
у меня там просто логирование событий

хотел бы имена событий зашить жестко

m
03.07.2018
11:29:12
Это разве что-то меняет?

Ну сделай вызов функций с этими именами в названии, если их не много.

Google
m
03.07.2018
11:31:07
или имена событий вынеси в константы.

Александр
03.07.2018
11:31:44
logging.Log(logging.EventName, params)

но получается ничто мне не мешает сделать

logging.Log("anyText", params)

если константы текстовые

m
03.07.2018
11:32:43
logging.Error(params)

Александр
03.07.2018
11:33:02
слишком много будет вариантов кажется

m
03.07.2018
11:33:24
А если много вариантов, значит они не нужны реально.

Объедини редкоиспользуемые

или сделай log.Raw(log.EventName, params) , которым никто сроду и не станет пользоваться, ибо есть более короткие методы.

кто пользователь твоего пакета?

Александр
03.07.2018
11:36:04
в приложеньке локально лежит

я просто от выстрела в ногу страхуюсь

Google
m
03.07.2018
11:36:31
т.е. ты сам и есть единственный пользователь?

Александр
03.07.2018
11:36:38
пока да

я думал что можно сделать кастомный тип с ограничением на заполнение

тогда все ок будет

на каждое событие по структуры

m
03.07.2018
11:37:49
да можно. ты ж выше в ссылке видел дни недели?

Александр
03.07.2018
11:37:49
внутри полей стрктуры прописаны типы

m
03.07.2018
11:39:41
у меня у пакете логирования всего два метода: Warn() и Fatal() оба принимают a ...interface{}

и ещё функция для склеивания разных типов: func Errorln(a ...interface{}) error { return errors.New(fmt.Sprintln(a...)) }

Александр
03.07.2018
11:41:07
ну на самом деле у тебя получается куча кусков по всему коду

когда захотитет сменить формат логирования - замучаетесь

у меня другой подход, в коде только вызываются "события" и передаются параметры

сами сообщения и какой вывод - они в пакете

m
03.07.2018
11:43:24
я использую Warn() для отладки и записи в лог всяких ошибок. Fatal() использую , когда паника или неправильные данные при старте передали.

Александр
03.07.2018
11:43:57
для интерпайз еще бывают фильтрация некоторых событий по группам (выводить только события бд например)

и фильтр по уровню критичности

и форматы разные ввывода

m
03.07.2018
11:44:36
как и ты, я пишу не для энтерпраза, а для себя. поэтому пишут так, как удобно мне лично.

такой подход оправдан ещё и потому, что не пишешь лишнего

Александр
03.07.2018
11:45:13
я пишу внутри компании ? требования там достаточно бывает странные

Google
Александр
03.07.2018
11:45:37
два раза меняли полностью формат вывода логов например

m
03.07.2018
11:46:02
Ну тогда тебе лучше знать, под какую ситуацию приспосабливаться.

Вдогонку... назови свой модуль логом, а не логированием. т.е. log и можно его экпортировать вот так: import ( . "tolxy/log" ) тогда в годе можно будет просто писать Error(params) или Warn(params).

логирование используется всюду обычно, поэтому логично использовать его без имени пакета.

Roman
03.07.2018
11:56:32
Можно по имени, вроде UserPermAdd/UserPermDelete/UserPermCreate
я enum'ы обычно в отдельной под-пакет определяю... import ( usr_t "github.com/proj/usr_t" ) usr_t.Admin usr_t.Customer

сам тип определяется как usr_t.Type в нём-же все методы типа String(), FromString(), MarshalJSON(), UnmarshalJSON()

Александр
03.07.2018
12:18:22
type enum string func (e enum) String() string { val := e if val == "ENUMVALUE" { return string(val) } return "" }

как вариант в принципе

я бы еще сам enum сделал кастомного типа, что бы руками не могло забить туда ничего

вот еще вариант

https://play.golang.org/p/6Ovq6C2O6Wo

ну вообще финальная идея такая

https://play.golang.org/p/hHXKSKx-NF1

плодим фабрики которые возращают тип который приватный

таким образом мы не сможем угробить значения внутри структуры

только занулить

Вячеслав
03.07.2018
13:14:19
Скажите, можно ли в t.Execute не передавать ссылку на экземпляр струкруты и сразу написать key:value набор? как в примере ниже? Если страниц много с разным набором полей, то нужно много структур городить ... мне кажется это идея не очень t, _ := template.ParseFiles(tempDir+"adminka/index.html") t.Execute(w, {Title: "adminka", Msg: "test2"})

Александр
03.07.2018
13:21:30
корми мап и без проблем

зачем структуру то?

Google
Вячеслав
03.07.2018
13:31:34
зачем структуру то?
напиши плз пример с мапом - чтото никак не получается у меня

Daniel
03.07.2018
13:55:12
а кто-то делал поддержку enum в структуре?
Неэкспортируемый тип, экспортируемые константы

Александр
03.07.2018
14:02:38
Никита
03.07.2018
15:33:51
Можно ли из функции Y получить название функции X, из которой Y была вызвана?

Проще говоря X вызвал Y. В Y надо получить название функции X.

Daniel
03.07.2018
15:35:17
Да, runtime, stack, вот это вот все

А вам зачем?

Диёр
03.07.2018
15:36:06
Да, runtime, stack, вот это вот все
Или хотя бы не выделываться и просто отправить туда флажочек какой-нибудь

Daniel
03.07.2018
15:36:20
Куда?!

Никита
03.07.2018
15:36:24
Куда?!
из X в Y

Само название кидать аргументом

Daniel
03.07.2018
15:37:02
Зачем это все?

Никита
03.07.2018
15:37:22
Хочу логировать название функции

Чтобы было проще понять где возникла ошибка, например

Karachun
03.07.2018
15:38:47
можно возвращать err со стеком

Daniel
03.07.2018
15:40:20
Хочу логировать название функции
Возьмите логгер, который это умеет. Zap, structlog

Vadim
03.07.2018
17:33:08
Привет, помню, была очень прикольная таблица, в которой можно было просмотреть скорость доступа к l1, l2, l3 и так далее. Если у кого-то есть в лс. Буду благодарен.

Google
Nikita
03.07.2018
18:57:23
интересно

Round trip within same datacenter 500,000 ns 500 us

Send 1K bytes over 1 Gbps network 10,000 ns 10 us

Roman
03.07.2018
19:03:16
а что такого?

Nikita
03.07.2018
19:04:07
почему?

понятно что не 20 us

но почему rt 500 us?

почему не 600 ?

Roman
03.07.2018
19:05:18
думаю, число эмпирическое.

там же еще задержки коммутации, например

а они зависят от архитектуры свитчей, например

ну и количества

Roman
03.07.2018
19:11:32
как относитесь к Singleton пакету для конфигов у которого имеется метод Load(filePath string) error? import "github.com/project/config" main() { config.Load("./config.json") config.ServerAddr // server address config.SigningSecret // certificate signing secret loaded from a file }

Страница 1547 из 1674