Go 1.18如何创建(int, time.Month, int)类型的日期元组数组?
在Go 1.18中创建(int, time.Month, int)类型的日期元组数组
Go语言没有原生元组类型,你想要的(int, time.Month, int)本质是一组不同类型值的组合,需要通过自定义结构体来实现,以下是修正后的可行方案:
方法一:定义命名结构体(推荐,可读性高)
先定义结构体封装年、月、日字段,再创建该结构体的数组:
package main import ( "time" ) // 定义日期元组结构体 type DateTuple struct { Year int Month time.Month Day int } func main() { // 初始化日期元组数组 days := []DateTuple{ // 直接字面量初始化 {Year: 2022, Month: time.July, Day: 4}, // 从time.Date的返回值构造 func() DateTuple { y, m, d := time.Date(2022, time.August, 15, 0, 0, 0, 0, time.UTC).Date() return DateTuple{y, m, d} }(), } }
方法二:使用匿名结构体(无需额外定义类型)
如果不想单独定义结构体,可以直接使用匿名结构体数组:
package main import ( "time" ) func main() { days := []struct { Year int Month time.Month Day int }{ {2022, time.July, 4}, // 利用匿名函数转换time.Date的返回值 { func() (int, time.Month, int) { return time.Date(2022, time.August, 15, 0, 0, 0, 0, time.UTC).Date() }(), }, } }
原代码问题说明
- 语法错误:Go中不存在
[](int, month, int)这种数组类型写法,且month未定义,正确的类型引用是time.Month - 类型不匹配:
time.Date().Date()返回三个独立的返回值,不能直接作为单个元素放入数组,需要封装为结构体实例后再存入
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

