V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
fgwmlhdkkkw
V2EX  ›  Go 编程语言

一个新的 reflect 扩展,基于 Offset 实现。

  •  
  •   fgwmlhdkkkw · 259 天前 · 963 次点击
    这是一个创建于 259 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github: lion

    • 比正常的实现快一点。

    • 可以不写 tag 来收集 metainfo 。

    • 可以获取未导出字段(仅限你自己定义的类型)。

    第 1 条附言  ·  237 天前

    新加了一个包enums,在init函数执行时,为当前包内的enum定义生成String方法。如果文件生成,则会输出需要重新编译的提醒。

    使用示例:

    type ErrorKind int
    const  (
          ErrorKindA  ErrorKind = iota
          ErrorKindB
          ErrorKindC
    )
    
    func init() {
          enums.Generate(func() *enums.Options[ErrorKind] {
    		return &enums.Options[ErrorKind]{
    			RemoveCommonPrefix: true,
    			NameOverwrites: map[ErrorKind]string{ErrorKindC: "CCCCC"},
    			AllSlice:           true,
    			AllSliceName:       "AllErrorKinds",
    			// JSON: true,  // 生成 MarshalJSON/UnmarshalJSON 方法
    			// Sql: true, // 生成 Value/Scan 方法
    		}
          })
    }
    
    

    生成代码示例:

    // Code generated by "github.com/zzztttkkk/lion/enums", DO NOT EDIT
    // Code generated @ 1736396153
    
    package vld
    
    import "fmt"
    
    
    
    func (ev ErrorKind) String() string {
    	switch(ev){
    		
    		case ErrorKindA: {
    			return "A"
    		}
    		case ErrorKindB: {
    			return "B"
    		}
    		case ErrorKindC: {
    			return "CCCCC"
    		}
    		default: {
    			panic(fmt.Errorf("vld.ErrorKind: unknown enum value, %d", ev))
    		} 
    	}
    }
    
    
    func init(){
    	
    	AllErrorKinds = append(AllErrorKinds, ErrorKindA)
    	
    	AllErrorKinds = append(AllErrorKinds, ErrorKindB)
    	
    	AllErrorKinds = append(AllErrorKinds, ErrorKindC)
    }
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:17 · PVG 09:17 · LAX 18:17 · JFK 21:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.