Size: a a a

2020 May 04

М

Мерль🛠 in Go-go!
Captain Flint
у меня есть структура, в которой есть дефолтные значения для интов 0. мне нужно чтобы на выходе я получил жсон, где вместо 0 будет null
именно null?
а просто исключать такое поле из итггового json не подойдёт? вот так:
https://play.golang.org/p/6pYAY64dazE
источник

CF

Captain Flint in Go-go!
не, не подойдет
источник

DP

Daniel Podolsky in Go-go!
Captain Flint
ну я ж полюбому не один, кто с таким столкнулся?)
не очень понятно, зачем это надо
источник

Д

Дмитрий in Go-go!
кастомный маршалер
источник

CF

Captain Flint in Go-go!
Daniel Podolsky
не очень понятно, зачем это надо
микросервисы, поля должны всегда быть, при всем этом 0 в бизнес кейсе не валидный случай
источник

CF

Captain Flint in Go-go!
Дмитрий
кастомный маршалер
да, я понимаю, вот щас и пытаюсь написать и не получается
источник

CF

Captain Flint in Go-go!
func (self *VNullInt) MarshalText() ([]byte, error) {
 data := string(*self)
 if data != "0" {
   return []byte(data), nil
 }
 return []byte(nil), nil
}
источник

DP

Daniel Podolsky in Go-go!
но если поле обхявить, как *int, и включить маршалинг полей с дефолтными значениями - возможно, так и будет
источник

М

Мерль🛠 in Go-go!
Captain Flint
не, не подойдет
Тогда можно вот так

https://play.golang.org/p/0IXaoszb7_e
источник

E

Edgar in Go-go!
Или же просто *int
источник

CF

Captain Flint in Go-go!
Мерль🛠
Тогда можно вот так

https://play.golang.org/p/0IXaoszb7_e
я не тот метод оходу пытался переписать. Спасибо!
источник

CF

Captain Flint in Go-go!
Edgar
Или же просто *int
пробовал, все равно ноль был
источник

E

Edgar in Go-go!
Потому что ты вставлял туда цифру с 0?)
источник

М

Мерль🛠 in Go-go!
Captain Flint
func (self *VNullInt) MarshalText() ([]byte, error) {
 data := string(*self)
 if data != "0" {
   return []byte(data), nil
 }
 return []byte(nil), nil
}
нельзя так кастовать числа в строки

почитайте здесь:  https://www.digitalocean.com/community/tutorials/how-to-convert-data-types-in-go-ru
источник

CF

Captain Flint in Go-go!
👍
источник

А

Алексей in Go-go!
Подскажите, как прочитать такую ошибку. Только начинаю с Go разбираться. Использую gorm
источник

D

Darwin in Go-go!
panic(err.String())
источник

DS

Daniil Suvorov in Go-go!
Не паникуй. Используй например log.Fatal(err)
источник

ЛА

Локоть Анатолий... in Go-go!
Polkota
https://stackoverflow.com/questions/61580461/golang-in-which-cases-i-should-use-pointer-and-when-not-how-write-test-for-che

Даже вопрос на стековерфлоу создал.

Никто мне так и не смог объяснить это. Это потому что никто не понимает? Или это настолько элементарно, что просто лень разжевывать простые вещи?
Есть у вас разница по количеству аллоцированной памяти, а не по тому, сколько раз было аллоцировано?

Когда передаёте указатель, то все равно происходит аллокация, только указателя.
А когда структуру как аргумент, то копируется структура. Должна быть разница в объеме аллокации, а не в количестве!
источник

М

Мерль🛠 in Go-go!
Daniil Suvorov
Не паникуй. Используй например log.Fatal(err)
Пожалуйста, не используйте log.Fatalf нигде кроме как в примерах и прототипах


Эта штука просто прибивает приложения, коннекты не успевают корректно закрыться, буфферы флашнуться и тд

Если есть необратимая ошибка, то смело паникуйте
источник