The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
PhilosophyKing

Go 语言的代码生成器 gogen

  •  
  •   PhilosophyKing · Feb 10, 2019 · 8641 views
  •   You need to sign in to view this topic
    This topic created in 2694 days ago, the information mentioned may be changed or developed.

    最近写项目时老是要用 Set 这个结构,但是 Go 没有 Generics,每次都得重复写一些东西。所以写了个带 WebUI 界面的代码生成器: https://creatcodebuild.github.io/gogen/

    代码在: https://github.com/CreatCodeBuild/gogen

    弱弱地说一句,我平时也在教课。想学编程的同学加我微信:we1070494510

    18 replies    2019-02-11 13:21:05 +08:00
    PhilosophyKing
        1
    PhilosophyKing  
    OP
       Feb 10, 2019
    pabupa
        2
    pabupa  
       Feb 10, 2019
    ……老实说,我觉得这个项目浪费了这个名字呀。
    relaxgo
        3
    relaxgo  
       Feb 10, 2019 via Android   ❤️ 6
    乐于当老师挺好的,但是这个水平做老师,感觉早了点
    blless
        4
    blless  
       Feb 10, 2019 via Android   ❤️ 1
    我还以为是这种…
    https://github.com/dave/jennifer
    不过楼主你也可以看看人家的代码生成器是啥样的
    jseanj
        5
    jseanj  
       Feb 10, 2019
    项目应该叫 gogenset
    relaxgo
        6
    relaxgo  
       Feb 10, 2019 via Android
    既然写 go,用户名还是别用驼峰吧,看着太难受了,也容易遇到问题
    keepfun
        7
    keepfun  
       Feb 10, 2019 via iPhone
    @blless 虽然不知道什么场景会用到,但是收藏了。
    blless
        8
    blless  
       Feb 10, 2019 via Android
    @fenglangjuxu 很多地方能用啊,比如不想用反射,需要泛型什么的
    heiybb
        9
    heiybb  
       Feb 10, 2019 via Android
    哲的王?好像 B 站上刚看到这个
    PhilosophyKing
        10
    PhilosophyKing  
    OP
       Feb 10, 2019
    @blless 我在写这个之前看了的。和我的需求不吻合。我写这个是完全为了融入到我的 workflow。
    PhilosophyKing
        11
    PhilosophyKing  
    OP
       Feb 10, 2019
    @relaxgo 没懂什么意思?你是说我的 V2EX 用户名?
    azh7138m
        12
    azh7138m  
       Feb 10, 2019
    @relaxgo 一开始我觉得,不能随意诋毁别人的劳动成果,直到我点开源码,看到全是字符串拼接

    多说一句,最近好多 B 站的编程教学,看得我想砸电脑 :)
    Reficul
        13
    Reficul  
       Feb 10, 2019 via Android
    基于 js 字符串格式化的代码生成,不但不能保证生成的代码符合 Go 词法不说,正常情况下还线程不安全😂😂😂
    keepfun
        14
    keepfun  
       Feb 10, 2019 via iPhone
    @blless 我大概看了一遍 都是生成 golang 代码的 暂时还不知道 怎么实现你说的,替代反射。
    blless
        15
    blless  
       Feb 10, 2019 via Android
    @fenglangjuxu #14 随便举个例子,把一个特定的结构体序列化成 json 字符串最高效的办法是啥?肯定是硬编码,硬编码直接手写很麻烦,维护性也不高。这个时候代码生成器就可以用了。
    我想了下,代码生成器一个是需要性能比较重要的场景。不然大部分语言内部逻辑跟反射应该都可以实现。 还有一个就是比较成熟的框架,大部分增删改查模式比较固定的时候,也可以用代码生成器生成大量重复代码。
    keepfun
        16
    keepfun  
       Feb 10, 2019 via iPhone
    @blless 嗯 第一点 golang 结构体 json 化 后面加 tag 的确很麻烦,而且多数变量首字母还得大写(不知道是不是你的意思)
    第二点 php 反射就很流弊 一个文件的类 函数 变量都能通过反射获得并打印(据我目前的 golang 水平 go 这点貌似不好实现)
    第三点 这一点很好理解 就是我前面说的 生成代码。
    另外,多谢解答。
    PhilosophyKing
        17
    PhilosophyKing  
    OP
       Feb 11, 2019
    @blless 多谢你的解答。是的,我写这个工具的应用场景几乎和你说的一模一样。

    @Reficul @azh7138m 另外几位站友说的也没错,这个工具目前就是 JS 字符串生成而已。然后我再复制粘贴,但是对于我来说已经够了。就类似于 https://mholt.github.io/json-to-go/ , 也是 JS 生成而已。但是已经足以起到提高工作效率的作用。它并不是 automation 的一部分。

    因为工具是从我本身的 App 的一部分抽出来的( App 本身的测试是完全过关的),所以作为独立工具来说,当然还没有测试和语法检索等。所以我先放出来,如果真的其他人有这个需求,或者我自身的需求变多变频繁,我也会提高这个工具的工程质量。
    PhilosophyKing
        18
    PhilosophyKing  
    OP
       Feb 11, 2019
    @fenglangjuxu 补充一点,如果我日后的需求提升,我会考虑将其做成一个 CLI,然后该 CLI 可以自动扫描我的源代码,生成指定 type T 的 Container<T> 类型。这样就可以成为自动 workflow 或者 build 的一部分。但是目前项目不需要这么强的工具。

    目前这个 JS 版本仅仅花了 1-2 小时调试,纯粹是为了我少打字而已。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3007 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 07:55 · PVG 15:55 · LAX 00:55 · JFK 03:55
    ♥ Do have faith in what you're doing.