You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何初始化代表年份的不等长嵌套数组?

在Go中创建月份天数可变的年份嵌套结构

在Go里,你没法直接定义由不同长度数组组成的数组——因为数组的长度是其类型的一部分,[31]int和[29]int属于完全不同的类型,不能放在同一个数组中。你需要改用切片的切片([][]int)来实现需求,每个子切片对应一个月份的天数。

实现步骤

  1. 先实现闰年判断逻辑,用来确定2月的天数;
  2. 定义各月份的天数列表(根据闰年动态调整2月);
  3. 初始化外层切片,再为每个月份创建对应长度的子切片。

代码示例

package main

import "fmt"

// 判断是否为闰年
func isLeapYear(year int) bool {
	return year%4 == 0 && (year%100 != 0 || year%400 == 0)
}

func main() {
	targetYear := 2024 // 可替换为任意年份
	// 定义各月份的基础天数
	monthDays := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
	if isLeapYear(targetYear) {
		monthDays[1] = 29 // 闰年调整2月天数
	}

	// 初始化年份切片的切片
	year := make([][]int, 12)
	for i := 0; i < 12; i++ {
		year[i] = make([]int, monthDays[i])
		// 可选:给每个元素赋初始值,比如对应日期
		for j := range year[i] {
			year[i][j] = j + 1
		}
	}

	// 验证结果
	for idx, month := range year {
		fmt.Printf("%d月有%d天,前3个元素:%v\n", idx+1, len(month), month[:3])
	}
}

非闰年的简化初始化写法

如果不需要动态处理闰年,也可以直接用字面量初始化:

func main() {
	year := [][]int{
		make([]int, 31),
		make([]int, 28),
		make([]int, 31),
		make([]int, 30),
		make([]int, 31),
		make([]int, 30),
		make([]int, 31),
		make([]int, 31),
		make([]int, 30),
		make([]int, 31),
		make([]int, 30),
		make([]int, 31),
	}

	fmt.Println("1月长度:", len(year[0])) // 输出31
	fmt.Println("2月长度:", len(year[1])) // 输出28
}

关键说明

  • [][]int是切片的切片,外层切片的每个元素都是[]int类型的切片,切片长度可动态变化,完美适配不同月份的天数需求;
  • 若需要给日期元素赋值,初始化子切片后循环赋值即可,示例中直接将元素设为对应的日期数。

内容的提问来源于stack exchange,提问作者Krushnal Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:39:35