为了账号安全,请及时绑定邮箱和手机立即绑定

在分配时打开切片?

在分配时打开切片?

Go
森栏 2021-06-27 02:12:29
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但那是无效的。
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

如果您的函数仅通过第一次出现分隔符来拆分字符串,则您始终可以创建自己的函数:


package main


import (

    "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



查看完整回答
反对 回复 2021-07-05
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您还可以使用匿名函数:


a, b := func() (string, string) {

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

    return x[0], x[1]

}()

注意:不要忘记()右括号末尾的 ,}否则会出现错误:


assignment mismatch: 2 variable but 1 values


这是因为没有()函数(1 个值)返回的不是预期的字符串(2 个值)。


查看完整回答
反对 回复 2021-07-05
  • 3 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信