2014-07-09 2 views
1

Jan Macmake의 book on Go에있는 일부 코드를 사용하여 주간 서버를 Mac에서 실행하고 있습니다. 내가 것을 피하기 위해이 코드에 포함 할 수 IP4 이외의 다른 있나요 내가 (Mac에서)를 실행할 때, 나는이 오류Mac에서 ip4 서버를 실행 중입니다.

Fatal error: unknown network ip4 

를 얻을

func main() { 

     service := ":1200" 
     tcpAddr, err := net.ResolveTCPAddr("ip4", service) 
     checkError(err) 

     listener, err := net.ListenTCP("tcp", tcpAddr) 
     checkError(err) 

그러나이 코드를 사용하여 오류?

tcpAddr, err := net.ResolveTCPAddr("ip4", service) 

참고로, 나는 또한 ip6을 시도하고 동일한 오류가 발생했습니다.

+0

이동 버전은 무엇입니까? – fabrizioM

+0

@ fabrizioM go go3.3 darwin/amd64 – Leahcim

답변

4

ResolveTCPAddr에 대한 documentation에 따르면 net 인수에 대한 유효한 값은 당신이 ResolveTCPAddrResolveIPAddr

+0

덕분에 책에 오타가 있습니다. – Leahcim

1

사이에 혼합지고있어 의심 "TCP", "tcp4"와 "tcp6"

있습니다 "ip4"는 ResolveTCPAddr(source)의 유효한 네트워크가 아닙니다.

일반 IP 주소를 확인하려면 ResolveIPAddr을 사용하십시오. "포트 호스트"또는 "[IPv6를 호스트 % 유효한 문자열

아니다"IP4 "

1

ResolveTCPAddr

ResolveTCPAddr 양식의 TCP 주소로 요지를 구문 분석에 대한 설명서를 참조하십시오 영역] : 포트 "네트워크 이름 및 포트 네트워크 이름, "tcp ","tcp4 "또는"tcp6 " 있어야합니다 한 쌍의 이름을 확인합니다. A "[:: 1] : 80", "[ipv6-host] : http"또는 "[ipv6-host % zone] : 80과 같이 IPv6의 리터럴 주소 또는 호스트 이름은 대괄호 대괄호로 묶어야합니다 ".

그리고 코드 :

func ResolveTCPAddr(net, addr string) (*TCPAddr, error) { 
     switch net { 
     case "tcp", "tcp4", "tcp6": 
     case "": // a hint wildcard for Go 1.0 undocumented behavior 
      net = "tcp" 
     default: 
      return nil, UnknownNetworkError(net) 
     } 
     a, err := resolveInternetAddr(net, addr, noDeadline) 
     if err != nil { 
      return nil, err 
     } 
     return a.toAddr().(*TCPAddr), nil 
    } 
+0

감사합니다. 책에 오타가 있습니다. – Leahcim

관련 문제