If you use protobufs and the current guidelines you can always add new fields.
> On Mar 11, 2021, at 12:43 PM, 'Axel Wagner' via golang-nuts > <golang-nuts@googlegroups.com> wrote: > > > Hi, > > in some sense, every change to an exported symbol is a breaking change. So a > straight-forward "does this change have the potential to break a reverse > dependency" is simply not the best way to look at compatibility. We need more > nuance. > > In general, I believe it would be fair to tell the consumer of a struct that > if they want to be guarded against this kind of breakage, they can't use the > conversion-ignoring-struct-tags utility, but have to copy the fields one by > one. That is similar to how we already tell the consumers of a struct that > they need to use struct-literals with field-names. > > To the producer I would say that they should consider how a struct is used, > to decide if something is a breaking change or not. For example, I believe it > would be fair to assume that an http.Server is not something that would be > serialized so there would likely be little need to consider adding a struct > field a breaking change. But something like a jwt token, or other > plain-old-data struct types should probably be aware of this and might have > to consider adding a field a breaking change. > > In either case, I think you bring up an interesting case that I haven't > thought about, before. Personally, I feel that at its core, the approach of > controlling encoding behavior via struct tags just isn't friendly towards > other packages re-using the same type, but changing encoding aspects. > Allowing conversions to ignore struct tags was a way to remedy that, but as > you demonstrate, that's still far from ideal. > > So perhaps what we should do is discourage new encoding packages from > coupling options to the type itself and instead encourage pass them to the > encoder directly - or at least providing the option to do so. At the end of > the day, Go gives authority over a type to the package defining it, both in > terms of what the language allows and in terms of domains of breaking > changes. So if we want to enable people to re-use a type with different > encodings, we should have a way to customize the encoding behavior of types > without having to touch them directly. > >> On Thu, Mar 11, 2021 at 6:15 PM 'Colin Arnott' via golang-nuts >> <golang-nuts@googlegroups.com> wrote: >> When working with wire formats, serialisation, and external types, it is >> useful to change the struct tags: https://play.golang.org/p/h6b6FmeDuaR. But >> when the original struct has a field added, this breaks: >> https://play.golang.org/p/VHmV9r2MxNt. It seems like a foregone conclusion >> that we suggest against adding a struct field because it is a breaking >> change. That said, we probably do not want to restrict the ability to >> convert structs as it is really helpful. Is this a known issue or previously >> discussed topic? If not what if anything should be done to clarify best >> practices? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/dcdcbd6a-838e-47c1-8b3d-935d485d96b5n%40googlegroups.com. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGp%2B%2B90tK1A-Sti1wjap%3DXxBU-QfrE1ReUSCYDt75tmHQ%40mail.gmail.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/8B757F98-CF4F-43D5-A8EB-0621BDFE2DD0%40ix.netcom.com.