在分配时打开切片?

Go 中有没有一种优雅的方法可以像 Python 一样从数组中进行多项赋值?这是我正在尝试执行的操作的 Python 示例(拆分字符串,然后将结果数组分配给两个变量)。


python:

>>> a, b = "foo;bar".split(";")

我目前的解决方案是:


x := strings.Split("foo;bar", ";")

a, b := x[0], x[1]

我可以看到这在某些构造中变得混乱。我目前面临的实际示例是解析并分配给地图的书签文件:


bookmark := make(map[string]string)

x := strings.Split("foo\thttps://bar", "\t")

name, link := x[0], x[1]

bookmark[name] = link

现在我有一个无用的变量x。我想做类似的事情:


bookmark := make(map[string]string)

name, line := strings.Split("foo\thttps://bar", "\t")

bookmark[name] = link

但那是无效的。


森栏
浏览 198回答 3
3回答

守着星空守着你

如果您的函数仅通过第一次出现分隔符来拆分字符串,则您始终可以创建自己的函数:package mainimport (    "fmt"    "strings")func Split(s, sep string) (string, string) {    // Empty string should just return empty    if len(s) == 0 {        return s, s    }       slice := strings.SplitN(s, sep, 2)    // Incase no separator was present    if len(slice) == 1 {        return slice[0], ""    }    return slice[0], slice[1]}func main() {    a, b := Split("foo;bar;foo", ";")    fmt.Println(a, b)}输出:foo 酒吧; foo

慕尼黑8549860

您还可以使用匿名函数:a, b := func() (string, string) {    x := strings.Split("foo;bar", ";")    return x[0], x[1]}()注意:不要忘记()右括号末尾的 ,}否则会出现错误:assignment mismatch: 2 variable but 1 values这是因为没有()函数(1 个值)返回的不是预期的字符串(2 个值)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go