파이썬에서는 문자열을 분할하여 변수에 할당 할 수 있습니다.
ip, port = '127.0.0.1:5432'.split(':')
그러나 Go에서는 작동하지 않는 것 같습니다.
ip, port := strings.Split("127.0.0.1:5432", ":")
// assignment count mismatch: 2 = 1
질문 : 문자열을 분할하고 한 번에 값을 할당하는 방법은 무엇입니까?
답변
예를 들어 두 단계
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)
}
산출:
127.0.0.1 5432
예를 들어 한 단계
package main
import (
"fmt"
"net"
)
func main() {
host, port, err := net.SplitHostPort("127.0.0.1:5432")
fmt.Println(host, port, err)
}
산출:
127.0.0.1 5432 <nil>
답변
go
융통성이 있기 때문에 자신만의 python
스타일 분할을 만들 수 있습니다 …
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
}
답변
RemoteAddr
from 과 같은 필드의 IPv6 주소는 http.Request
“[:: 1] : 53343”
그래서 잘 net.SplitHostPort
작동합니다 :
package main
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)
}
출력은 다음과 같습니다
127.0.0.1 5432 <nil>
::1 2345 <nil>
localhost 1234 <nil>
답변
package main
import (
"fmt"
"strings"
)
func main() {
strs := strings.Split("127.0.0.1:5432", ":")
ip := strs[0]
port := strs[1]
fmt.Println(ip, port)
}
문자열에 대한 정의는 다음과 같습니다.
// Split slices s into all substrings separated by sep and returns a slice of
// the substrings between those separators.
//
// If s does not contain sep and sep is not empty, Split returns a
// slice of length 1 whose only element is s.
//
// If sep is empty, Split splits after each UTF-8 sequence. If both s
// and sep are empty, Split returns an empty slice.
//
// It is equivalent to SplitN with a count of -1.
func Split(s, sep string) []string { return genSplit(s, sep, 0, -1) }
답변
문자열을 분할하는 방법에는 여러 가지가 있습니다.
- 임시로 만들고 싶다면 다음과 같이 나누십시오.
_
import net package
host, port, err := net.SplitHostPort("0.0.0.1:8080")
if err != nil {
fmt.Println("Error is splitting : "+err.error());
//do you code here
}
fmt.Println(host, port)
-
구조체를 기준으로 분할 :
- 구조체를 만들고 이렇게 나눕니다
_
type ServerDetail struct {
Host string
Port string
err error
}
ServerDetail = net.SplitHostPort("0.0.0.1:8080") //Specific for Host and Port
지금과 같은 당신의 코드에서 사용 ServerDetail.Host
하고ServerDetail.Port
특정 문자열을 나누지 않으려면 다음과 같이하십시오.
type ServerDetail struct {
Host string
Port string
}
ServerDetail = strings.Split([Your_String], ":") // Common split method
와 같이 사용 ServerDetail.Host
하고 ServerDetail.Port
.
그게 다야.
답변
당신이하고있는 일은 두 개의 다른 변수에서 split 응답을 받아들이고 strings.Split ()은 하나의 응답 만 반환하고 문자열 배열입니다. 단일 변수에 저장 한 다음 배열의 인덱스 값을 가져 와서 문자열의 일부를 추출 할 수 있습니다.
예 :
var hostAndPort string
hostAndPort = "127.0.0.1:8080"
sArray := strings.Split(hostAndPort, ":")
fmt.Println("host : " + sArray[0])
fmt.Println("port : " + sArray[1])
답변
참고로, Go에서 문자열을 분할하는 동안 구분 기호를 포함시킬 수 있습니다. 이렇게하려면 strings.SplitAfter
아래 예와 같이 사용 하십시오.
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Printf("%q\n", strings.SplitAfter("z,o,r,r,o", ","))
}
