You may be also interested in https://github.com/mmatczuk/go_generics (the 
credit goes to Google).

With it you can write a generic code that actually compiles and change the 
types later ex. https://github.com/scylladb/go-set/tree/master/internal/set

W dniu poniedziałek, 25 marca 2019 15:58:03 UTC+1 użytkownik David Skinner 
napisał:
>
> I am very, very, old school, grew up with ASM and Macro Assembly. I really 
> appreciate this.
>
> I prefer to write Go code in a purely idiomatic way but there are times i 
> just want to finish the job and ship it.
>
> Thank you for sharing.
>
> On Sunday, March 24, 2019 at 4:23:52 PM UTC-5, Ecstatic Coder wrote:
>>
>> Just to inform you that I've just released an first version of *Generis*, 
>> a lightweight code preprocessor adding the following features to the Go 
>> language :
>>
>>    - Generic code definition and instantiation.
>>    - Conditional compilation.
>>    - ERB-like HTML templating.
>>    - Allman to K&R style conversion.
>>
>> https://github.com/senselogic/GENERIS
>>
>> It's very similar in function to both Ego and Genny, but implemented as a 
>> free-form C++-like preprocessor.
>>
>> Probably of no use at all for anyone who likes to develop Go code in a 
>> purely idiomatic way, which obviously I'm not...
>>
>>
>> *Sample*
>>
>> package main;
>> // -- IMPORTS
>> import (
>>     "html"
>>     "io"
>>     "log"
>>     "net/http"
>>     "strconv"
>>     );
>> // -- DEFINITIONS
>>
>> #define DebugMode
>> #as true
>> // ~~
>>
>> #define HttpPort
>> #as 8080
>> // ~~
>>
>> #define WriteLine( {{text}} )
>> #as log.Println( {{text}} )
>> // ~~
>>
>> #define local {{variable}} : {{type}};
>> #as var {{variable}} {{type}};
>> // ~~
>>
>> #define DeclareStack( {{type}}, {{name}} )
>> #as
>>     // -- TYPES
>>
>>     type {{name}}Stack struct
>>     {
>>         ElementArray []{{type}};
>>     }
>>
>>     // -- INQUIRIES
>>
>>     func ( stack * {{name}}Stack ) IsEmpty(
>>         ) bool
>>     {
>>         return len( stack.ElementArray ) == 0;
>>     }
>>
>>     // -- OPERATIONS
>>
>>     func ( stack * {{name}}Stack ) Push(
>>         element {{type}}
>>         )
>>     {
>>         stack.ElementArray = append( stack.ElementArray, element );
>>     }
>>
>>     // ~~
>>
>>     func ( stack * {{name}}Stack ) Pop(
>>         ) {{type}}
>>     {
>>         local
>>             element : {{type}};
>>
>>         element = stack.ElementArray[ len( stack.ElementArray ) - 1 ];
>>
>>         stack.ElementArray = stack.ElementArray[ : len( stack.ElementArray ) 
>> - 1 ];
>>
>>         return element;
>>     }
>> #end
>> // ~~
>>
>> #define DeclareStack( {{type}} )
>> #as DeclareStack( {{type}}, {{type:PascalCase}} )
>> // -- TYPES
>> DeclareStack( string )DeclareStack( int32 )
>> // -- FUNCTIONS
>> func HandleRootPage(
>>     response_writer http.ResponseWriter,
>>     request * http.Request
>>     )
>> {
>>     local
>>         boolean : bool;
>>     local
>>         natural : uint;
>>     local
>>         integer : int;
>>     local
>>         real : float64;
>>     local
>>         escaped_text,
>>         text : string;
>>     local
>>         integer_stack : Int32Stack;
>>
>>     boolean = true;
>>     natural = 10;
>>     integer = 20;
>>     real = 30.0;
>>     text = "text";
>>     escaped_text = "<escaped text/>";
>>
>>     integer_stack.Push( 10 );
>>     integer_stack.Push( 20 );
>>     integer_stack.Push( 30 );
>>
>>     #write response_writer
>>         <!DOCTYPE html>
>>         <html lang="en">
>>             <head>
>>                 <meta charset="utf-8">
>>                 <title><%= request.URL.Path %></title>
>>             </head>
>>             <body>
>>                 <% if ( boolean ) { %>
>>                     <%= "URL : " + request.URL.Path %>
>>                     <br/>
>>                     <%@ natural %>
>>                     <%# integer %>
>>                     <%& real %>
>>                     <br/>
>>                     <%~ text %>
>>                     <%= escaped_text %>
>>                     <%= "<%% ignored %%>" %>
>>                     <%% ignored %%>
>>                 <% } %>
>>                 <br/>
>>                 Stack :
>>                 <br/>
>>                 <% for !integer_stack.IsEmpty() { %>
>>                     <%# integer_stack.Pop() %>
>>                 <% } %>
>>             </body>
>>         </html>
>>     #end
>> }
>> // ~~
>> func main()
>> {
>>     http.HandleFunc( "/", HandleRootPage );
>>
>>     #if DebugMode
>>         WriteLine( "Listening on http://localhost:HttpPort"; );
>>     #end
>>
>>     log.Fatal(
>>         http.ListenAndServe( ":8080", nil )
>>         );
>> }
>>
>>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to