有一些疑问需要解答
summerKK opened this issue · 1 comments
summerKK commented
package analyzer
....
// New 用于创建一个分析器实例。
func New(
mid module.MID,
respParsers []module.ParseResponse,
scoreCalculator module.CalculateScore) (module.Analyzer, error) {
moduleBase, err := stub.NewModuleInternal(mid, scoreCalculator)
if err != nil {
return nil, err
}
if respParsers == nil {
return nil, genParameterError("nil response parsers")
}
if len(respParsers) == 0 {
return nil, genParameterError("empty response parser list")
}
var innerParsers []module.ParseResponse
for i, parser := range respParsers {
if parser == nil {
return nil, genParameterError(fmt.Sprintf("nil response parser[%d]", i))
}
innerParsers = append(innerParsers, parser)
}
return &myAnalyzer{
ModuleInternal: moduleBase,
respParsers: innerParsers,
}, nil
}
var innerParsers []module.ParseResponse
for i, parser := range respParsers {
if parser == nil {
return nil, genParameterError(fmt.Sprintf("nil response parser[%d]", i))
}
innerParsers = append(innerParsers, parser)
}
- 为什么这里检查
respParsers
参数,需要把值赋值到一个新的变量innerParsers
里面去.不赋值给新的变量我感觉也没什么问题啊!也不存在并发问题.如果参数出错了就直接return了. - 并且我在
Pipline
里面也是看到这样的代码. - 希望老师解答一下,要不然我觉得这里肯定有什么阴谋,或者还是老师写代码的习惯.😂😂😂😂😂😂😂😂😂
hyper0x commented
主要是为了防止在分析器创建后外界再对解析器列表进行更改。
我一般总是建议对任何外界的任何输入都进行比较严格的前期检查。