
Александр
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
сам тип определяется как usr_t.Type
в нём-же все методы типа String(), FromString(), MarshalJSON(), UnmarshalJSON()

Roman
03.07.2018
11:59:44

Александр
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

Александр
03.07.2018
14:02:38

m
03.07.2018
15:05:57

Никита
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

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

Никита
03.07.2018
15:36:24
Само название кидать аргументом

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

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

Roman
03.07.2018
18:02:09

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
}