Как разделить строку и назначить ее переменным в Golang?



в Python можно разделить строку и присвоить ее переменные:



ip, port = '127.0.0.1:5432'.split(':')


но в Golang это, кажется, не работает:



ip, port := strings.Split("127.0.0.1:5432", ":")
// assignment count mismatch: 2 = 1


вопрос: как разделить строку и присвоить значения за один шаг?

933   4  

4 ответов:

два шага, например,

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
}

IPv6-адреса для таких полей, как RemoteAddr С http.Request форматируются как "[::1]:53343"

так net.SplitHostPort работает:

основной пакет

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>

есть несколько способов разбивать строку :

  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)
  1. Сплит на основе структуры:

    • создать структуру и разделить, как это

_

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.

вот и все.

Comments

    Ничего не найдено.