Go中的对/元组数据类型

新手上路,请多包涵

我需要一个队列( stringint )对。这很简单:

 type job struct {
    url string
    depth int
}

queue := make(chan job)
queue <- job{url, depth}

Go 中是否有内置的对/元组数据类型?支持从一个函数 返回多个值,但是据我所知,生成的多个值元组在 Go 的类型系统中不是一等公民。是这样吗?

至于“你试过什么”部分,明显的语法(来自 Python 程序员的 POV)

 queue := make(chan (string, int))

没用。

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

Go 中没有元组类型,你是对的,函数返回的多个值并不代表一等对象。

Nick 的回答显示了如何使用 interface{} 来处理任意类型。 (我可能使用数组而不是结构来使其像元组一样可索引,但关键思想是 interface{} 类型)

我的另一个答案显示了如何做类似的事情来避免使用匿名结构创建类型。

这些技术具有元组的某些属性,但不,它们不是元组。

原文由 Sonia 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以这样做。它看起来比元组更冗长,但这是一个很大的改进,因为您可以进行类型检查。

编辑:按照尼克的建议,用完整的工作示例替换了片段。游乐场链接: http ://play.golang.org/p/RNx_otTFpk

 package main

import "fmt"

func main() {
    queue := make(chan struct {string; int})
    go sendPair(queue)
    pair := <-queue
    fmt.Println(pair.string, pair.int)
}

func sendPair(queue chan struct {string; int}) {
    queue <- struct {string; int}{"http:...", 3}
}

匿名结构和字段非常适合像这样快速而肮脏的解决方案。尽管对于除了最简单的情况之外的所有情况,您最好像您所做的那样定义一个命名结构。

原文由 Sonia 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题