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

go_ognl

  •  
  •   CC11001100 ·
    CC11001100 · 2023-08-03 16:14:59 +08:00 · 900 次点击
    这是一个创建于 512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    go_ognl

    关键字符.#,遇到都会截断到下一层(#和特殊,会将当前层展开,例如一个 struct,会将所有字段对应的值展开)


    1. 直接使用 go_ognl.Get(obj,path) 获取需要的值,返回对象提供 Effective() 判断是否有有效值, Value() 返回解析后的对象,如果使用#将会返回[]interface{}{},Values()则直接回返回一个[]interface{}{} ,同时也提供.Get(path)链式调用;
    2. 使用go_ognl.Parse(obj) 保存为临时,可以在此基础上多次调用 .Get(path)

    download

    go get github.com/golang-infrastructure/go-ognl
    

    demo

    package main
    
    import (
    	"fmt"
    	"github.com/songzhibin97/go-ognl"
    )
    
    type Test struct {
    	First  string
    	Middle *Test
    	last   int
    }
    
    func main() {
    	t1 := &Test{
    		First: "first",
    		last:  7,
    	}
    	t1.Middle = t1
    	fmt.Println(ognl.Get(t1, "First").Value())                     // first
    	fmt.Println(ognl.Get(t1, "last").Value())                      // 7
    	fmt.Println(ognl.Get(t1, "Middle.Middle.Middle.last").Value()) // 7
    	fmt.Println(ognl.Get(t1, "#").Value())                         // []interface{}{"first",t1,7}
    	fmt.Println(ognl.Get(t1, "##").Value())                        // []interface{}{"first","first",t1,7,7}
    	fmt.Println(ognl.Get(t1, "##").Values())                       // []interface{}{"first","first",t1,7,7}
    }
    
    
    5 条回复    2023-09-20 21:58:49 +08:00
    Kisesy
        1
    Kisesy  
       2023-08-04 11:44:28 +08:00
    会添加设置功能吗
    CC11001100
        2
    CC11001100  
    OP
       2023-08-11 11:46:04 +08:00
    @Kisesy 啊老哥具体是什么“设置”功能?方便展开说一下吗
    Kisesy
        3
    Kisesy  
       2023-08-11 12:39:18 +08:00
    @CC11001100 赋值操作,Set(),有 Get 了,Set 应该带上吧 👀
    CC11001100
        4
    CC11001100  
    OP
       2023-09-17 12:08:15 +08:00
    @Kisesy #3 老哥此言有理,这个库现在有俩维护者,我去找另一个维护者内部讨论下咋实现
    CC11001100
        5
    CC11001100  
    OP
       2023-09-20 21:58:49 +08:00
    @Kisesy #3 老哥,经过维护者的共同努力(我负责忽悠,另一个哥们负责写代码),我们实现了这个功能,邀请您有空来 Review PR ,猛烈提出意见和建议(代码也不是我写的,随便喷保证不急眼😋): https://github.com/golang-infrastructure/go-ognl/pull/13/files
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:10 · PVG 20:10 · LAX 04:10 · JFK 07:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.