Я новичок в использовании Go (уже около 9 месяцев на полную ставку). Тем не менее, я привык к Python, typescript и PHP, и я всегда нахожу более короткий путь с этими языками. Тем не менее, я изо всех сил пытаюсь понять, что было бы самым идиоматичным способом добиться следующего:
transit := gin.H{
"rise": rs.Rise.String(),
"set": rs.Set.String(),
}
if rs.Rise.IsZero() {
transit["rise"] = nil
}
if rs.Set.IsZero() {
transit["set"] = nil
}
По сути, я устанавливаю структуру по умолчанию, затем, если мне нужно изменить, я меняю... но мне это кажется неэффективным... поэтому мне интересно, есть ли здесь какие-нибудь приемы, которые я мог бы использовать?
Я выбрал этот конкретный реальный сценарий, но я рад, что у меня есть примеры (а не кодирование для меня)...
@JimB Я должен исправить это на «подробный»
Многословие во многих случаях является плохой метрикой, сложность написания кода заключается не в количестве набранных символов, а в передаче намерений следующему читателю кода. Приведенное ниже решение не менее подробное в данном случае, и с большим количеством условий оно по-прежнему требует накладных расходов на отслеживание нескольких других абстракций. Если нет огромного количества опций для установки, я ожидаю увидеть простую серию условных выражений, чтобы справиться с этим в большинстве кодов.
Да, полностью, это всегда борьба между удобочитаемостью и умом, языки, к которым я больше всего привык (Python, javascript и typescript), всегда обеспечивают определенный уровень умности в ущерб удобочитаемости ИМХО.
Это не является неэффективным с точки зрения исполнения. Это может быть немного многословно по сравнению с другими языками. Есть способы сократить такой повторяющийся код с помощью анонимных функций. Это может помочь сократить длинный повторяющийся раздел без ущерба для удобочитаемости.
type StringZeroable interface {
fmt.Stringer
IsZero() bool
}
checkZero:=func(in StringZeroable) interface{} {
if in.IsZero() {
return nil
}
return in.String()
}
transit := gin.H{
"rise": checkZero(rs.Rise),
"set": checkZero(rs.Set)
}
Что здесь означает «неэффективно»?