无法理解一些Go代码

问题描述:

,我发现像这样的代码:无法理解一些Go代码

// first returns the first address which satisfies strategy, or if 
// none do, then the first address of any kind. 
func (addrs addrList) first(strategy func(Addr) bool) Addr { 
    for _, addr := range addrs { 
     if strategy(addr) { 
      return addr 
     } 
    } 
    return addrs[0] 
} 

我真搞不清楚为什么FUNC包括:第一另一FUNC命名FUNC (Addr),以及该代码如何实现评论所说的行为?

+0

func(Addr)bool是参数_strategy_的**类型**。所以参数“策略”必须是一个函数,它需要_Addr_类型的东西并返回true或false。 – 2017-11-18 08:40:31

+0

所以,我想确认的一件事是:func(Addr)bool是类似“string”还是“int”的?但这个func如何返回满足策略的第一个地址? – user8645601

考虑战略作为过滤器的功能,它只检查地址范围内循环可通过过滤器或不 另一个完全平等的方式做,这是像

func strategy(addr Addr) bool { 
    if addr == ... { 
     return true 
    } 

    return false 
} 

func main(){ 
    addr := first(strategy) 
} 

1 func (addrs addrList) first(strategy func(Addr) bool) Addr { 
2 for _, addr := range addrs { 
3  if strategy(addr) { 
4   return addr 
     } 
    } 
5 return addrs[0] 
    } 

在关键词:

  1. 功能上addrs名为first回报Addr花费strategy参数必须是一个函数,它需要Addr并返回bool
  2. foraddrsrange每个addraddr
  3. 应用功能strategy如果它(strategy FUNC)返回true
  4. 然后整体功能first返回该addr
  5. 整体功能first返回第一个[0]Addraddrs,暗示:只有当strategy呼叫addr时才会发生中的0返回true

Func first接受作为参数strategy另一种功能类型func(Addr) bool。 所以第二个函数应该以Addr作为输入并返回bool加法器是否正常。

作为第一个这样的Addr发现第一个函数退出并返回它。

登录与过滤器类似 - 迭代列表直到找到第一个匹配值。

作为最后的手段,如果没有人Addr值得到肯定的答复第一个函数返回片中的第一个值。