patterngoMajor
Pair/tuple data type in Go
Viewed 0 times
pairdatatypetuple
Problem
I need a queue of (
are there built-in pair/tuple data types in Go? There is support for returning multiple values from a function, but as far as I can tell, the multiple value tuples produced are not first-class citizens in Go's type system. Is that the case?
As for the "what have you tried" part, the obvious syntax (from a Python programmer's POV)
didn't work.
string, int) pairs. That's easy enough:type job struct {
url string
depth int
}
queue := make(chan job)
queue <- job{url, depth}are there built-in pair/tuple data types in Go? There is support for returning multiple values from a function, but as far as I can tell, the multiple value tuples produced are not first-class citizens in Go's type system. Is that the case?
As for the "what have you tried" part, the obvious syntax (from a Python programmer's POV)
queue := make(chan (string, int))didn't work.
Solution
There is no tuple type in Go, and you are correct, the multiple values returned by functions do not represent a first-class object.
Nick's answer shows how you can do something similar that handles arbitrary types using
My other answer shows how you can do something similar that avoids creating a type using anonymous structs.
These techniques have some properties of tuples, but no, they are not tuples.
Nick's answer shows how you can do something similar that handles arbitrary types using
interface{}. (I might have used an array rather than a struct to make it indexable like a tuple, but the key idea is the interface{} type)My other answer shows how you can do something similar that avoids creating a type using anonymous structs.
These techniques have some properties of tuples, but no, they are not tuples.
Context
Stack Overflow Q#13670818, score: 88
Revisions (0)
No revisions yet.