当前位置: 首页 > 知识库问答 >
问题:

Go中的成对/元组数据类型

劳嘉实
2023-03-14

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

type job struct {
    url string
    depth int
}

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

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

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

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

没有工作。

共有3个答案

冯枫
2023-03-14

如果你想的话,你可以这样做

package main

import "fmt"

type Pair struct {
    a, b interface{}
}

func main() {
    p1 := Pair{"finished", 42}
    p2 := Pair{6.1, "hello"}
    fmt.Println("p1=", p1, "p2=", p2)
    fmt.Println("p1.b", p1.b)
    // But to use the values you'll need a type assertion
    s := p1.a.(string) + " now"
    fmt.Println("p1.a", s)
}

然而,我认为你已经拥有的是完美的惯用语言,结构完美地描述了你的数据,这是使用普通元组的一大优势。

丌官高远
2023-03-14

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

Nick的回答展示了如何使用interface{}处理任意类型的类似操作。{idea}可以使用数组而不是键来创建一个可索引的代码

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

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

潘高洁
2023-03-14

你可以做到。这是一个很大的改进,因为它看起来比一个类型更冗长。

编辑:按照尼克的建议,用完整的工作示例替换代码片段。游乐场连接: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}
}

匿名结构和字段适用于这种快速而肮脏的解决方案。但是,对于除最简单的情况外的所有情况,最好像以前一样定义命名结构。

 类似资料:
  • 在 Python 中,元组是一种不可变序列,它使用圆括号来表示: >>> a = (1, 2, 3) # a 是一个元组 >>> a (1, 2, 3) >>> a[0] = 6 # 元组是不可变的,不能对它进行赋值操作 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeE

  • 所以我有了这个类,我想要一个接受int的方法,并创建一个这个大小的新数组。如果我声明 这将创建一个大小为10的数组。 我试过做

  • 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 Go 语言按类别有以下几种数据类型: 序号 类型和描述 1 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 2 数字类型 整型 int 和浮点型 float32

  • 元组是一个和列表和相似的数据类型,两者拥有着基本相同的特性,但是也有很多不同的地方,这节课我们来详细的介绍下元组这个数据类型 1. 简介 1.1 定义 元组是一个有序的只读序列,元组中所有的元素放在 () 中间,并用逗号分开,例如: (1, 2, 3),一个包含 3 个整数的元组 (‘a’, ‘b’, ‘c’),一个包含 3 个字符串的元组 1.2 元组与列表的区别 元组与列表很相似,都是有序的只

  • 问题内容: 我已经看到了一些类似的问题两种不同的类型如何使用接口在golang中实现相同的方法?,但就我而言,我的类型没有相同的基本类型。我的类型是不同大小的数组。 因此,可能不重复两种方法GetByte0()? 问题答案: 例如, 输出: