示例都是 go test 执行的测试代码,所以将里面的测试代码去除 
  由于之前 NumberExponentExample_test.go 已经验证可运行, 所以将 err 的异常处理去除  package  main
import  ( 
	"log" 
	"github.com/hyperjumptech/grule-rule-engine/ast" 
	"github.com/hyperjumptech/grule-rule-engine/builder" 
	"github.com/hyperjumptech/grule-rule-engine/engine" 
	"github.com/hyperjumptech/grule-rule-engine/pkg" 
) 
type  ExponentData struct  { 
	Check float64 
	Set   float64 
} 
const  ExponentRule =  `
rule  ExponentCheck  "User Related Rule"  salience 10 {
	when 
		ExponentData.Check == 6.67428e-11
	Then
		ExponentData.Set = .12345E+5;
		Retract("ExponentCheck");
}
` 
func  main ( )  { 
	exponent :=  & ExponentData{ 
		Check:  6.67428e-11 , 
		Set:    0 , 
	} 
	dataContext :=  ast. NewDataContext ( ) 
	dataContext. Add ( "ExponentData" ,  exponent) 
	lib :=  ast. NewKnowledgeLibrary ( ) 
	rb :=  builder. NewRuleBuilder ( lib) 
	rb. BuildRuleFromResource ( "TestExponent" ,  "1.0.0" ,  pkg. NewBytesResource ( [ ] byte ( ExponentRule) ) ) 
	eng1 :=  & engine. GruleEngine{ MaxCycle:  5 } 
	kb,  _  :=  lib. NewKnowledgeBaseInstance ( "TestExponent" ,  "1.0.0" ) 
	eng1. Execute ( dataContext,  kb) 
	log. Println ( exponent) 
} 
运行结果: 结构体 ExponentData 的 Set 字段被设置为了 12345 $ go run test.go 
2024 /12/05 01:22:59 & { 6 .67428e-11 12345 } 
gin中文文档: https://learnku.com/docs/gin-gonic/1.7 下载 gin 模块 go get -u  github.com/gin-gonic/gin
package  main
import  ( 
	"net/http" 
	"github.com/gin-gonic/gin" 
) 
func  main ( )  { 
	r :=  gin. Default ( ) 
    r. LoadHTMLGlob ( "templates/*" ) 
	r. GET ( "/index" ,  func ( c * gin. Context)  { 
        c. HTML ( http. StatusOK,  "index.tmpl" ,  gin. H{ } ) 
    } ) 
	r. Run ( ) 
} 
创建 templates 目录, 然后添加 index.tmpl 模板 mkdir  -p  templates &&  touch  templates/index.tmpl
编写表单, 往后端 /number/ 接口发送 post 请求 < html> < formaction = " /number/" method = " POST" > < textareaname = " textarea" > </ textarea> < inputtype = " submit" value = " Submit" > </ form> </ html> 启动项目访问 localhost:8080/index 会看到一个文本框 go run main.go
 
编写 /number/ 的后端接口, 运行Grule规则 import  ( 
    "github.com/hyperjumptech/grule-rule-engine/ast" 
	"github.com/hyperjumptech/grule-rule-engine/builder" 
	"github.com/hyperjumptech/grule-rule-engine/engine" 
	"github.com/hyperjumptech/grule-rule-engine/pkg" 
) 
type  ExponentData struct  { 
	Check float64 
	Set   float64 
} 
func  main ( )  { 
    r. POST ( "/number/" ,  func ( c * gin. Context)  { 
        textareaContent :=  c. PostForm ( "textarea" ) 
        exponent :=  & ExponentData{ 
            Check:  6.67428e-11 , 
            Set:    0 , 
        } 
        dataContext :=  ast. NewDataContext ( ) 
        dataContext. Add ( "ExponentData" ,  exponent) 
        lib :=  ast. NewKnowledgeLibrary ( ) 
        rb :=  builder. NewRuleBuilder ( lib) 
        rb. BuildRuleFromResource ( "TestExponent" ,  "1.0.0" ,  pkg. NewBytesResource ( [ ] byte ( textareaContent) ) ) 
        eng1 :=  & engine. GruleEngine{ MaxCycle:  5 } 
        kb,  _  :=  lib. NewKnowledgeBaseInstance ( "TestExponent" ,  "1.0.0" ) 
        eng1. Execute ( dataContext,  kb) 
        c. JSON ( http. StatusOK,  gin. H{ 
            "textareaContent" :  exponent. Set, 
        } ) 
    } ) 
} 
重启项目, 访问 localhost:8080/index , 将Grule规则放入文本框提交 rule  ExponentCheck  "User Related Rule"  salience 10 {
	when 
		ExponentData.Check == 6.67428e-11
	Then
		ExponentData.Set = .12345E+5;
		Retract("ExponentCheck");
}
 
结果能返回 exponent 的 Set 字段值: 12345 package  main
import  ( 
	"net/http" 
	"github.com/gin-gonic/gin" 
    "github.com/hyperjumptech/grule-rule-engine/ast" 
	"github.com/hyperjumptech/grule-rule-engine/builder" 
	"github.com/hyperjumptech/grule-rule-engine/engine" 
	"github.com/hyperjumptech/grule-rule-engine/pkg" 
) 
type  ExponentData struct  { 
	Check float64 
	Set   float64 
} 
func  main ( )  { 
	r :=  gin. Default ( ) 
    r. GET ( "/ping" ,  func ( c * gin. Context)  { 
        c. JSON ( 200 ,  gin. H{ 
            "message" :  "pong" , 
        } ) 
    } ) 
    r. LoadHTMLGlob ( "templates/*" ) 
	r. GET ( "/index" ,  func ( c * gin. Context)  { 
        c. HTML ( http. StatusOK,  "index.tmpl" ,  gin. H{ } ) 
    } ) 
    r. POST ( "/number/" ,  func ( c * gin. Context)  { 
        textareaContent :=  c. PostForm ( "textarea" ) 
        exponent :=  & ExponentData{ 
            Check:  6.67428e-11 , 
            Set:    0 , 
        } 
        dataContext :=  ast. NewDataContext ( ) 
        dataContext. Add ( "ExponentData" ,  exponent) 
        lib :=  ast. NewKnowledgeLibrary ( ) 
        rb :=  builder. NewRuleBuilder ( lib) 
        rb. BuildRuleFromResource ( "TestExponent" ,  "1.0.0" ,  pkg. NewBytesResource ( [ ] byte ( textareaContent) ) ) 
        eng1 :=  & engine. GruleEngine{ MaxCycle:  5 } 
        kb,  _  :=  lib. NewKnowledgeBaseInstance ( "TestExponent" ,  "1.0.0" ) 
        eng1. Execute ( dataContext,  kb) 
        c. JSON ( http. StatusOK,  gin. H{ 
            "textareaContent" :  exponent. Set, 
        } ) 
    } ) 
	r. Run ( ) 
}