W Pythonie możliwe jest podzielenie łańcucha i przypisanie go do zmiennych:
ip, port = '127.0.0.1:5432'.split(':')
ale w Go nie wydaje się działać:
ip, port := strings.Split("127.0.0.1:5432", ":")
// assignment count mismatch: 2 = 1
Pytanie: Jak podzielić ciąg i przypisać wartości w jednym kroku?
splittedString
: =strings.Split("127.0.0.1:5432", ":")
Ans: =splittedString[index]
możesz uzyskać dostęp do wartości podzielonego łańcuchaOdpowiedzi:
Na przykład dwa kroki
Wynik:
Na przykład jeden krok
Wynik:
źródło
err
niestety otrzymałem to z powrotem :too many colons in address 2001:0db8:85a3:0000:0000:8a2e:0370:7334
:(Ponieważ
go
jest elastyczny i możesz stworzyć własnypython
podział stylu ...źródło
Adresy IPv6 dla pól takich jak
RemoteAddr
odhttp.Request
mają format „[:: 1]: 53343”Więc
net.SplitHostPort
działa świetnie:Wynik to:
źródło
Oto definicja ciągów
źródło
Istnieje wiele sposobów na podzielenie ciągu:
_
Podziel na podstawie struktury:
_
Teraz użyj w swoim kodzie takich jak
ServerDetail.Host
iServerDetail.Port
Jeśli nie chcesz dzielić określonego ciągu, zrób to w ten sposób:
i użyj jak
ServerDetail.Host
iServerDetail.Port
.To wszystko.
źródło
./prog.go:21:4: assignment mismatch: 1 variable but net.SplitHostPort returns 3 values
To, co robisz, polega na tym, że akceptujesz podzieloną odpowiedź w dwóch różnych zmiennych, a ciągi znaków.Split () zwraca tylko jedną odpowiedź, a jest to tablica łańcuchów. musisz zapisać go w jednej zmiennej, a następnie możesz wyodrębnić część ciągu, pobierając wartość indeksu tablicy.
przykład:
źródło
Na marginesie, możesz dołączyć separatory podczas dzielenia ciągu w Go. Aby to zrobić, użyj
strings.SplitAfter
poniższego przykładu.źródło
Golang nie obsługuje niejawnego rozpakowywania plasterka (w przeciwieństwie do Pythona) i to jest powód, dla którego to nie zadziała. Podobnie jak w przykładach podanych powyżej, musielibyśmy to obejść.
Jedna uwaga dodatkowa:
Niejawne rozpakowywanie ma miejsce dla funkcji wariadycznych w go:
źródło