gopcp/example.v2

有一些疑问需要解答

summerKK opened this issue · 1 comments

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里面也是看到这样的代码.
  • 希望老师解答一下,要不然我觉得这里肯定有什么阴谋,或者还是老师写代码的习惯.😂😂😂😂😂😂😂😂😂

主要是为了防止在分析器创建后外界再对解析器列表进行更改。

我一般总是建议对任何外界的任何输入都进行比较严格的前期检查。