- Створіть єдиний журнал. Запустіть і передайте його навколо?
Це можливо. Log.Logger може використовуватися одночасно з декількох goroutines.
- Пройти навколо вказівника на цей журнал.
log.New повертає a, *Logger
що, як правило, вказує на те, що слід передати об'єкт навколо як вказівник. Передача його як значення створює копію структури (тобто копію Logger), а потім кілька функцій можуть записувати в той самий io.Writer одночасно. Це може бути серйозною проблемою, залежно від реалізації письменника.
- Чи повинен кожна програма або функція створювати реєстратор?
Я б не створював окремий реєстратор для кожної функції чи програми. Горутини (і функції) використовуються для дуже легких завдань, які не виправдовують обслуговування окремого реєстратора. Можливо, це гарна ідея створити реєстратор для кожного більшого компонента вашого проекту. Наприклад, якщо ваш проект використовує послугу SMTP для надсилання електронної пошти, створення окремого реєстратора для поштової служби звучить як гарна ідея, щоб ви могли фільтрувати та вимикати вихід окремо.
- Чи слід створити реєстратор як глобальну змінну?
Це залежить від вашого пакету. У попередньому прикладі служби електронної пошти було б, мабуть, гарною ідеєю мати один реєстратор для кожного примірника вашої послуги, щоб користувачі могли реєструвати помилки під час використання служби електронної пошти gmail інакше, ніж збої, що сталися під час використання локального MTA (наприклад, sendmail ).