我正在尝试获取我机器上的系统接口列表,我正在使用 net 包,它在此处定义。我有一小段代码,它在尝试打印错误时崩溃,我无法弄清楚为什么错误会出现在我身上。它应该返回一个错误,或者 nil 对吗?我已经用 sudo、root 和普通用户帐户运行了这段代码,认为这可能是网络接口的权限问题,但它在所有用户级别中都存在。package mainimport ( "net" "fmt")func main() { var err error var interfaces []net.Interface var ifString []string interfaces, err = net.Interfaces() fmt.Printf("%v",interfaces) if err != nil { for _, v := range interfaces { ifString = append(ifString, v.Name) } } else { fmt.Printf(err.Error()) ifString = append(ifString, "unable to get system interfaces") }}go build程序运行和执行时输出如下:[{1 65536 lo up|loopback} {2 1500 eno1 b8:cc:3c:8e:d4:d3 up|broadcast|multicast} {9 1500 tun0 up|pointtopoint|multicast}]panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x4a5269]goroutine 1 [running]:main.main()/home/andrew/interface/borked.go:20 +0x269
1 回答

一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
您正在收到一个 nil 指针取消引用,因为这正是您正在做的事情。
鉴于代码中的以下 if 语句:
if err != nil {
for _, v := range interfaces {
ifString = append(ifString, v.Name)
}
} else {
fmt.Printf(err.Error())
...
}
当为 nilelse时达到。err然而,您正试图访问其中的一个字段:err.Error(),取消引用一个 nil 指针。
您需要颠倒您的if陈述,这是错误的方法。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消