You should use interfaces and a “node” type. > On Dec 20, 2021, at 12:07 PM, Michael Ellis <michael.f.el...@gmail.com> wrote: > > >Just to be clear, the way I understood you is that you want HtmlTree.C to > be a slice which has elements which can each either be a string or an > *HtmlTree - i.e. you want these to be mixed in a single slice. Correct? > > Actually, no. An HtmlTree instance whose content is a string is a terminal > node. The recursion in the Render() func looks like: > > for _, c := range h.C { > switch c := c.(type) { > case string: > b.WriteString(c) > case *HtmlTree: > err = Render(c, b, rindent) > if err != nil { > return fmt.Errorf("%s : %v", h.T, err) > } > default: > return fmt.Errorf("Bad content %v. Can't render type > %T! ", h.C, c) > } > } > > I suppose it's still a problem, though, since the compiler doesn't have any > way of knowing that's how trees of HtmlTree meant to be constructed. I should > have expressed the intended constraint on HtmlTree.C as `string | > []*HtmlTree`. Does that make a difference? >> On Monday, December 20, 2021 at 10:25:26 AM UTC-5 axel.wa...@googlemail.com >> wrote: >> Just to be clear, the way I understood you is that you want HtmlTree.C to be >> a slice which has elements which can each either be a string or an *HtmlTree >> - i.e. you wan these to be mixed in a single slice. Correct? >> Because that is not a use case for generics, it's a use case for sum types >> (which Go does not have). >> >>> On Mon, Dec 20, 2021 at 4:11 PM Michael Ellis <michael...@gmail.com> wrote: >>> > They can't, sorry. >>> Ok. Thanks, Axel. >>> Saves me wasting more time. In the past 3 years of using Go, this is the >>> only use case where I've really wanted generics (other cases I've >>> encountered so far are easily handled with code generation). >> >>> -- >> >>> 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...@googlegroups.com. >> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/golang-nuts/ac75dc32-733d-4a73-9735-619c33cb4cd4n%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/2de22684-0263-465c-8ac0-ff288c535fb7n%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/9ABD0D98-6041-4A45-A2C3-D924E298BF16%40ix.netcom.com.