你使用的Go版本是什么(go version
)?
go version go1.9.2 darwin/amd64
你做了什么?
package main
import (
"net"
"fmt"
)
func main() {
fmt.Println(net.LookupHost("10.256"))
fmt.Println(net.LookupHost("10.256.1"))
fmt.Println(net.LookupHost("10.10.256"))
fmt.Println(net.LookupHost("10.10.256.1"))
fmt.Println(net.LookupHost("10.10.10.256"))
}
你觉得会看到什么?
这个程序在Linux和Windows上运行正常,并且显示以下输出,但在Mac上不行。
[] lookup 10.256: no such host
[] lookup 10.256.1: no such host
[] lookup 10.10.256: no such host
[] lookup 10.10.256.1: no such host
[] lookup 10.10.10.256: no such host
你实际上看到了什么?
[10.0.1.0] <nil>
[] lookup 10.256.1: no such host
[10.10.1.0] <nil>
[] lookup 10.10.256.1: no such host
[] lookup 10.10.10.256: no such host
4条答案
按热度按时间n3h0vuf21#
这是正确的行为,对于Linux和Mac都是一样的。
请查看
inet_aton(3)
手册页以获取更多详细信息:谢谢。
d5vmydt92#
谢谢Gregory。我仍然对Linux和Mac之间的输出差异感到困惑。看起来Mac显示了正确的输出,而且应该是这样的,而不是Linux。
aurhwmvo3#
Linux在使用cgo解析器时可能也是如此。
zbq4xfa04#
当GODEBUG=netdns=cgo时,通用名称解析依赖于用户空间提供的外部功能,如libc(实现之间的行为有所不同,例如,BSD变体上的libc与macOS/iOS上的libc、glibc、Windows API和Plan 9之间的行为不同)。当GODEBUG=netdns=go时,DNS名称解析仅使用包内部的帮助程序。
我认为基本上将IP字面值处理与现有的GODEBUG=netdns=go行为对齐是可以的(因为没有人会使用传统的IPv4路由),尽管我仍然想知道我们是否应该处理RFC 7050中描述的IP地址合成。在没有应用程序上下文的情况下,很难确定什么是正确的,什么是错误的。
朋友:#20790