Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proposal: net: ParseIP should return an error, like other Parse functions #18757

Closed
OrangeTux opened this issue Jan 23, 2017 · 4 comments
Closed
Labels
FrozenDueToAge Proposal v2 An incompatible library change
Milestone

Comments

@OrangeTux
Copy link

OrangeTux commented Jan 23, 2017

net.ParseIP has 1 return value. It doesn't return a value of type error. Other parse methods like url.Parse, time.ParseDuration and net.ParseMAC return 2 values. One of a specific type, the other is of type error.

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

go version go1.7.go version go1.7.4 linux/amd64

What operating system and processor architecture are you using (go env)?

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/auke/projects/go"
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build151269634=/tmp/go-build -gno-record-gcc-switches"
CXX="g++"
CGO_ENABLED="1"

What did you do?

If possible, provide a recipe for reproducing the error.
A complete runnable program is good.
A link on play.golang.org is best.

https://play.golang.org/p/d0K77gxoJe

package main

import (
	"fmt"
	"net"
)

func main() {
	// Trying to parse an invalid MAC address results in an error.
	// This is expected behaviour, other Parse methods do also return
	// 2 values, like time.ParseDuration or url.Parse.
	_, err := net.ParseMAC("invalid")

	if er != nil {
		fmt.Println(err)
	}

	// net.ParseIP doesn't follow this signature. It just returns nil
	// when parsing failed.
	ip := net.ParseIP("invalid")
	fmt.Println(ip)
}

What did you expect to see?

I'd expect that net.ParseIP has this signature:

func ParseIP(s string) (IP, error)

What did you see instead?

func ParseIP(s string) IP

@ianlancetaylor
Copy link
Contributor

Reasonable but we can't change it now. Marking as go2.

@ianlancetaylor ianlancetaylor changed the title net.ParseIP doesn't follow signature of other Parse methods. net: ParseIP should return an error, like other Parse functions Jan 23, 2017
@ianlancetaylor ianlancetaylor added the v2 An incompatible library change label Jan 23, 2017
@dsnet dsnet added this to the Unplanned milestone Jan 23, 2017
@rsc rsc changed the title net: ParseIP should return an error, like other Parse functions proposal: net: ParseIP should return an error, like other Parse functions Jun 17, 2017
@ghost
Copy link

ghost commented Aug 12, 2021

Reasonable but we can't change it now. Marking as go2.

Any idea when go2 will come out?

@tfieldmusic

This comment has been minimized.

@ianlancetaylor
Copy link
Contributor

In current thinking there will never be a Go 2, but this would be a potential net/v2. But there is active discussion on changing the representation of network addresses in the net package over at #46518. This idea should be folded into that discussion. I'm going to close this issue.

@golang golang locked and limited conversation to collaborators Aug 12, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge Proposal v2 An incompatible library change
Projects
None yet
Development

No branches or pull requests

5 participants