bilibili / bilibili/gengine

map[string]interface{}指针传到dataContext,在做 if 字段判断一直出现panic,求解

Open
#48 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
2.1k
Forks
281
PR merge metrics
No merged PRs in 30d

Description

`
const (
data_rule = \`
rule "data rule" "a test" salience 10
begin
println(up["status"])
if up["status"] == 1{
return true
}else{
return false
}
end \`
)
func Test_check(t *testing.T) {
upDataMap := make(map[string]interface{})
busiz1 := []byte(`{"reference_id":2073666894,"status":1}`)
decoder1 := json.NewDecoder(bytes.NewReader(busiz1))
err := decoder1.Decode(&upDataMap)
if err != nil {
fmt.Printf("Unmarshal error, err: %+v", err)
return
}
dataContext := context.NewDataContext()
dataContext.Add("up", &upDataMap)
ruleBuilder := builder.NewRuleBuilder(dataContext)
err1 := ruleBuilder.BuildRuleFromString(data_rule)
if err1 != nil {
panic(err1)
}
eng := engine.NewGengine()
err2 := eng.Execute(ruleBuilder, true)
if err2 != nil {
panic(err2)
}
fmt.Printf("Finish")
}`

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by running the supplied Test_check reproduction, then inspect context.NewDataContext and Add, followed by builder.BuildRuleFromString and engine.Execute. Trace how the pointer to upDataMap is evaluated in the if expression; done means the example executes without a panic and produces the expected conditional result.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.