Вы можете включить полную отчетность об ошибках (включая уведомления и строгие сообщения). Некоторые люди считают это слишком многословным, но это стоит попробовать. Установите error_reporting
на E_ALL | E_STRICT
в вашем php.ini.
error_reporting = E_ALL | E_STRICT
E_STRICT
уведомит вас об устаревших функциях и даст вам рекомендации о лучших методах выполнения определенных задач.
Если вы не хотите получать уведомления, но вы найдете другие типы сообщений полезными, попробуйте исключить уведомления:
error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE
Также убедитесь, что display_errors
включен в php.ini. Если ваша версия PHP старше 5.2.4, установите ее в On
:
display_errors = "On"
Если ваша версия 5.2.4 или новее, используйте:
display_errors = "stderr"
Вы должны взглянуть на встроенный флаг bson-пакета (который описан в bson.Marshal ). Это должно позволить вам сделать что-то вроде этого:
type adminUser struct {
User `bson:",inline"`
Secret string `json:"secret,omitempty" bson:"secret,omitempty"`
}
Однако теперь вы заметите, что при попытке прочитать из базы данных с этой структурой вы получаете повторяющиеся ключевые ошибки, поскольку оба adminUser
и User
содержат ключ secret
.
В вашем случае я удалил бы поле Secret
из User
и имел бы только тот, что был в adminUser
. Затем, когда вам нужно писать в поле secret
, убедитесь, что вы используете adminUser
.
Другой альтернативой было бы объявление интерфейса.
type SecureModel interface {
SecureMe()
}
Убедитесь, что ваша модель реализует его:
type User struct {
Id bson.ObjectId `json:"id,omitempty" bson:"_id,omitempty"`
Username string `json:"username" bson:"username"`
Secret string `json:"secret,omitempty" bson:"secret"`
}
func (u *User) SecureMe() {
u.Secret = ""
}
И вызывается только в зависимости от того, какой маршрут вызывается.
// I am being sent to a non-admin, secure me.
if _, ok := user.(SecureModel); ok {
user.(SecureModel).SecureMe()
}
// Marshall to JSON, etc.
...
Изменить: причина использования интерфейса здесь - это случаи, когда вы можете отправлять произвольные модели по проводу с использованием общего метода.