首页 > 解决方案 > 如何使用 Go 进行变量解包

问题描述

我正在尝试使用 Go 编写一个程序,该程序在 python 中执行元组或变量解包,如下所示

url = ('https://www.amazon.com/War-Art-Through-Creative-Battles' '/dp/1936891026/?keywords=war+of+art')
domain , *rest , isbn = url.split("/")[2:-1]

所以我使用 Go 编写了如下代码

package main

import (
    "fmt"
    "strings"
)

func main() {
    var a string
    a = ("https://www.amazon.com/War-Art-Through-Creative-Battles" +
        "/dp/1936891026/?keywords=war+of+art") // dont use ' quotes
    fmt.Println(a)
    split_a := strings.Split(a, "/")
    fmt.Println(split_a)
    var rest []string
    var domain string
    var isbn string
    domain, rest, isbn = split_a[2:-1]
}

并得到cannot assign 1 values to 3 variables compiler WrongAssignCount.

我理解这个错误,因为它反映了我想要实现的目标,我试图找出实现这一目标的方法,最后想到与其他人核实。任何建议都非常感谢。

谢谢你。

标签: go

解决方案


这只是字符串操作,所以没有一个正确的答案。由于您的来源是一个 URL,我想说net/url这是一个很好的起点:

package main

import (
   "net/url"
   "path"
)

func main() {
   p, e := url.Parse(
      "https://www.amazon.com/" +
      "War-Art-Through-Creative-Battles/dp/1936891026/?keywords=war+of+art",
   )
   if e != nil {
      panic(e)
   }
   rest, isbn := path.Split(path.Clean(p.Path))
   println(
      p.Host == "www.amazon.com",
      rest == "/War-Art-Through-Creative-Battles/dp/",
      isbn == "1936891026",
   )
}

https://golang.org/pkg/net/url


推荐阅读