2013-05-14 43 views

Trả lời

116

Hai bước, ví dụ,

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    s := strings.Split("127.0.0.1:5432", ":") 
    ip, port := s[0], s[1] 
    fmt.Println(ip, port) 
} 

Output:

127.0.0.1 5432 

Một bước, ví dụ,

package main 

import (
    "fmt" 
    "net" 
) 

func main() { 
    host, port, err := net.SplitHostPort("127.0.0.1:5432") 
    fmt.Println(host, port, err) 
} 

Output:

127.0.0.1 5432 <nil> 
+0

Việc này chia chuỗi thành danh sách các chuỗi chứ không phải danh sách ký tự. – dopatraman

+4

Điều gì xảy ra nếu chúng tôi nhận được địa chỉ IPv6? – PumpkinSeed

+0

@PumpkinSeed vừa thử nó, và tôi lấy lại từ 'err', thật không may:' quá nhiều dấu hai chấm trong địa chỉ 2001: 0db8: 85a3: 0000: 0000: 8a2e: 0370: 7334' :( –

17

Kể từ go là linh hoạt một bạn có thể tạo riêng chia python phong cách của bạn ...

package main 

import (
    "fmt" 
    "strings" 
    "errors" 
) 

type PyString string 

func main() { 
    var py PyString 
    py = "127.0.0.1:5432" 
    ip, port , err := py.Split(":")  // Python Style 
    fmt.Println(ip, port, err) 
} 

func (py PyString) Split(str string) (string, string , error) { 
    s := strings.Split(string(py), str) 
    if len(s) < 2 { 
     return "" , "", errors.New("Minimum match not found") 
    } 
    return s[0] , s[1] , nil 
} 
+0

đây là nhiều hơn một hơi khác so với tương đương python, làm thế nào bạn có thể tạo ra một phiên bản trả về biến số? – Groxx

+3

Tôi thích Go nhưng tôi sẽ không gọi nó là _flexible_: D – Pijusn

1

Các địa chỉ IPv6 cho các lĩnh vực như RemoteAddr từ http.Request được định dạng "[:: 1]: 53.343"

Vì vậy, net.SplitHostPort hoạt động tuyệt vời:

gói chính

import (
    "fmt" 
    "net" 
) 

func main() { 
    host1, port, err := net.SplitHostPort("127.0.0.1:5432") 
    fmt.Println(host1, port, err) 

    host2, port, err := net.SplitHostPort("[::1]:2345") 
    fmt.Println(host2, port, err) 

    host3, port, err := net.SplitHostPort("localhost:1234") 
    fmt.Println(host3, port, err) 
} 

Đầu ra là:

127.0.0.1 5432 <nil> 
::1 2345 <nil> 
localhost 1234 <nil> 
Các vấn đề liên quan