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

Go语言如何生成包含int与string混合类型的JSON数组

你可以通过[]any(Go 1.18+版本,旧版本可替换为[]interface{})类型的切片承载混合类型的结果,再配合标准库encoding/json做序列化即可,完全不需要手动拼接JSON字符串。

你之前认为struct是固定结构无法适配的属于认知误区:struct固定的是字段的类型,这里我们把输出数组字段的类型定义为[]any,本身就支持存入任意类型的元素,完全适配混合类型数组的需求。

规范实现代码

package main

import (
	"encoding/json"
	"fmt"
)

// 定义输出JSON对应的结构体
type FizzBuzzResp struct {
	Output []any `json:"output"`
}

func fizzbuzz(a int, b int) (string, error) {
	resp := FizzBuzzResp{
		Output: make([]any, 0, max(0, b-a+1)), // 预分配容量提升性能,同时避免a>b时负容量报错
	}
	for i := a; i <= b; i++ {
		switch {
		case i%3 == 0 && i%5 == 0:
			resp.Output = append(resp.Output, "FizzBuzz")
		case i%3 == 0:
			resp.Output = append(resp.Output, "Fizz")
		case i%5 == 0:
			resp.Output = append(resp.Output, "Buzz")
		default:
			resp.Output = append(resp.Output, i)
		}
	}
	// 直接调用标准库序列化,无需手动处理JSON格式
	raw, err := json.Marshal(resp)
	if err != nil {
		return "", err
	}
	return string(raw), nil
}

func main() {
	res, _ := fizzbuzz(1, 15)
	fmt.Println(res)
}

方案优势

  • 完全符合JSON规范,不需要手动处理引号、逗号、特殊字符转义等问题,不会出现格式错误
  • 规避了原手动拼接方案中a > b时切片切取越界的风险
  • 后续如果要调整输出结构,只需要修改结构体定义和赋值逻辑即可,维护成本更低

内容的提问来源于stack exchange,提问作者Fariz Awi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:18:00