在Go语言中打印一个列表中的列表。循环问题

huangapple go评论94阅读模式
英文:

Printing a list from within a list in Go. Loop trouble

问题

尝试从网络命名空间中打印路由列表。netlink.RouteList 函数需要一个 Interface 类型。通过 LinkList() 收集所有接口的列表。

我试图使用每个接口调用 RouteList 并打印其输出。RouteList 返回类型为 Route,我试图打印 int 类型的 LinkIndex。

看起来我的循环

for j := range rt {
  log.Printf("Route: %d : %d",rt[j].LinkIndex)
}

由于某种原因没有执行,如果在其中运行另一个 Printf 测试,将不会输出任何内容。

为什么这个循环不会被调用?

func (h *NSHandle) showInts() {
  nh := (*netlink.Handle)(h) //cast required
  int, err := nh.LinkList()
  if err != nil {
      log.Fatal(err)
  }
  log.Printf("Namespace Ints:")
  for i, r := range int {
      log.Printf("%d: %s", i, r.Attrs().Name)
      rt, err := netlink.RouteList(r,-1)
      if err != nil {
        log.Fatal(err)
      }
      for j := range rt {
        log.Printf("Route: %d : %d",rt[j].LinkIndex)
      }
  }
}
英文:

Trying to print a list of routes from within a network namespace. The netlink.RouteList function requires an Interface type. A list of all interfaces is gathered by LinkList().

I'm trying to call RouteList with every interface and print it's output. RouteList returns type Route where I'm trying to print the int LinkIndex.

It appears as if my loop

  for j := range rt {
    log.Printf("Route: %d : %d",rt[j].LinkIndex)
  }

Isn't executing for some reason, running another Printf test in there yields nothing.

Why wouldn't this loop be called?

func (h *NSHandle) showInts() {
  nh := (*netlink.Handle)(h) //cast required
  int, err := nh.LinkList()
  if err != nil {
      log.Fatal(err)
  }
  log.Printf("Namespace Ints:")
  for i, r := range int {
      log.Printf("%d: %s", i, r.Attrs().Name)
      rt, err := netlink.RouteList(r,-1)
      if err != nil {
        log.Fatal(err)
      }
      for j := range rt {
        log.Printf("Route: %d : %d",rt[j].LinkIndex)
      }
  }
}

答案1

得分: 1

这是一个糟糕的问题。发布后不久,我意识到数组显然是空的,因为在调用RouteList时没有使用接收器Handler。简单地修复了这个问题:

for i, r := range rl {
    log.Printf("%d: %s", i, LinkIndex)
}
英文:

This was a bad question. Soon after posting I had realised that the array was obviously empty due to the fact that RouteList was being called without the receiver Handler. This was fixed by simply:

for i, r := range rl {
    log.Printf("%d: %s", i, LinkIndex)
  }

huangapple
  • 本文由 发表于 2017年1月1日 15:34:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/41414041.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定