Trees although better in general than template still have one critical 
disadvantage: it is hard to control a code they produces.I tried approaches 
with templates, line by line and trees. Line by line is generally the best 
of them.
понедельник, 20 сентября 2021 г. в 23:15:22 UTC+3, [email protected]: 

> Yes. Generating large portions of code via templates is going to be hard. 
> Especially reusing and maintaining it.
> There is an excellent library called jennifer - 
> https://github.com/dave/jennifer that lets you generate Go code by 
> building the syntax tree. The examples make it super simple to get started. 
> You might want to check it out.
>
> On Monday, September 20, 2021 at 12:29:51 PM UTC-7 [email protected] wrote:
>
>> I'm writing a code generator from protobuf via templates and i can say - 
>> debugging it is very hard. When you have big files you can't check syntax 
>> easily, don't know how it looks and if you have errors in the template it 
>> is really hard to fix them.
>> So the protoc-gen-go case is preferable.
>>
>> вс, 19 сент. 2021 г. в 04:33, Denis Cheremisov <[email protected]>:
>>
>>> Templates is the worst approach to code generation IMO. Take a look how 
>>> they do this in protoc-gen-go: 
>>>
>>> https://github.com/protocolbuffers/protobuf-go/blob/b92717ecb630d4a4824b372bf98c729d87311a4d/cmd/protoc-gen-go/internal_gengo/main.go#L83
>>>
>>> I am using very similar approach, albeit I prefer format lines, it looks 
>>> like:
>>> [image: Screenshot from 2021-09-19 04-22-26.png]
>>>
>>> Templates may be OK only in trivial cases. Once you need something less 
>>> trivial it is getting harder and harder to reason how the final code will 
>>> look like with them
>>> and you will end up with bunch of hard to manage templates. Unlike it, 
>>> line-by-line code generation keep staying close to the final code.
>>> вторник, 7 сентября 2021 г. в 22:53:51 UTC+3, [email protected]: 
>>>
>>>>
>>>> Hi gophers,
>>>> I wrote https://github.com/fluhus/goat for generating go code in my 
>>>> projects. I hope it can help you too. It's a minimal tool that takes a 
>>>> text/template <https://pkg.go.dev/text/template> template as input, 
>>>> runs it on the given parameters and gofmt's the output. You can also use 
>>>> it 
>>>> on non-go-source.
>>>> Feedback is welcome.
>>>>
>>>> Amit
>>>>
>>> -- 
>>> 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 [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/golang-nuts/406179d9-c8f5-497d-8832-ea04ff9d03b3n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/golang-nuts/406179d9-c8f5-497d-8832-ea04ff9d03b3n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> -- 
>> Vasiliy Tolstov,
>> e-mail: [email protected]
>>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/a34732e5-e6c5-4a91-9c55-2aa57d927b01n%40googlegroups.com.

Reply via email to