perl でいうと、Test::TCP::empty_port() が欲しかったのでちょっと書く。 import ( "net"; "fmt"; ) func empty_port() int { for port := 10000; port < 20000; port++ { addr := fmt.Sprintf("localhost:%d", port); l, err := net.Listen("tcp", addr); if (err == nil) { l.Close(); return port; } } panic("can't listen empty port"); } 空いてそうなポートを順番に Listen してみて、成功したら Close() してから返す。 ここで l は net.Listener 型の値なんだけど、ローカル変数にいれておいてもスコープから外