你是否曾为在Go项目中创建可视化图表而烦恼?是否羡慕Python中Matplotlib的便捷,却苦于Go生态中图表库的匮乏?今天为大家介绍一个强大的Go图表库:go-echarts,让你在Go中也能轻松创建交互式、美观的图表!
什么是go-echarts?
go-echarts是基于Apache ECharts(百度开源的数据可视化库)的Go语言实现。它通过Go代码生成ECharts配置,让你能够用纯Go的方式创建各种复杂的图表,并在Web页面中展示。
为什么选择go-echarts?
-
完全Go原生:无需JS知识即可创建图表
-
丰富的图表类型:支持折线图、柱状图、饼图、散点图等30+种图表
-
高度可定制:可以精细调整图表的每个细节
-
交互式体验:生成的图表支持缩放、拖拽、提示框等交互
-
轻量级:依赖简单,易于集成
安装go-echarts
go get -u github.com/go-echarts/go-echarts/v2/...
创建第一个图表
让我们从一个简单的柱状图开始:

画出上面柱状图非常简单,如果你使用过baidu开源的echarts,那就更easy了,上面图表主要包含几块:
-
标题+副标题
-
X轴数据
-
Y轴数据
只要在代码中将以上三类数据设置完成,曲线就能渲染出来,代码如下:
Go
package main
import (
"math/rand"
"os"
"time"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
)
func generateBarItems() []opts.BarData {
items := make([]opts.BarData, 0)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 7; i++ {
items = append(items, opts.BarData{Value: r.Intn(100)})
}
return items
}
func barBasic() *charts.Bar {
bar := charts.NewBar()
weeks := []string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
bar.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{Title: "每周销量统计", Subtitle: "苹果 vs 香蕉."}),
)
bar.SetXAxis(weeks).
AddSeries("苹果", generateBarItems()).
AddSeries("香蕉", generateBarItems())
return bar
}
func CreateBar() {
bar := barBasic()
f, _ := os.Create("bar.html")
defer f.Close()
bar.Render(f)
}
func main() {
CreateBar()
}
折线图

代码如下:
Go
func generateLineData() []opts.LineData {
items := make([]opts.LineData, 0)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 6; i++ {
items = append(items, opts.LineData{Value: r.Intn(10000)})
}
return items
}
func CreateLineChart() {
line := charts.NewLine()
line.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{
Title: "小度眼镜 vs 小度智能音箱",
}),
charts.WithTooltipOpts(opts.Tooltip{Show: opts.Bool(true)}),
)
line.SetXAxis([]string{"1月", "2月", "3月", "4月", "5月", "6月"}).
AddSeries("小度眼镜", generateLineData()).
AddSeries("小度智能音箱", generateLineData()).
SetSeriesOptions(charts.WithLineChartOpts(opts.LineChart{Smooth: opts.Bool(true)}))
f, _ := os.Create("line.html")
line.Render(f)
}
饼图

代码如下:
Go
func CreatePieChart() {
pie := charts.NewPie()
pie.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{
Title: "用户设备分布",
}),
)
pie.AddSeries("设备", []opts.PieData{
{Name: "手机", Value: 1230},
{Name: "平板", Value: 456},
{Name: "电脑", Value: 789},
{Name: "其他", Value: 123},
})
f, _ := os.Create("pie.html")
pie.Render(f)
}
综上三个图表可以看出,go-echarts在生成图表的代码上,主要包含以下四个部分:
-
创建echarts对象:a := charts.NewXxxx()。
-
设定全局配置:a.SetGlobalOptions()。
-
设定图表数据:a.SetXAxis()、a.AddSeries()。
-
渲染、画图:a.Render()。
各个图表的生成,流程都如此,不同的就是进行各种配置,让图标的样式更加丰富,更加美观,比如有的同学喜欢使用暗黑主题,这样图表显得更加高大上一些,那么只需要加个全局配置即可:

代码:
Go
line.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{
Title: "小度眼镜 vs 小度智能音箱",
}),
charts.WithTooltipOpts(opts.Tooltip{Show: opts.Bool(true)}),
charts.WithInitializationOpts(opts.Initialization{
Theme: "dark", // 使用暗黑主题
}),
)
预告
大家应该注意到了,上面的图表都是生成在本地了,也就是说是在本地创建了一个个的html,那如何能在线生成这些图表,通过http api的方式就能看到呢,下一期介绍下go-echarts与gin框架的结合,我们通过http的api就可以生成、查看自己生成的图表。
上面所使用的代码全部在这里,需要的同学可以查阅:
Go
https://github.com/liupengh3c/career/tree/main/go-echarts
欢迎小伙伴们点赞、关注,一起写代码、学历史、跑跑步~~~~~~~~~~。
往期推荐
自动驾驶数仓-Base时间片与多个交集时间片的多维度合并算法
Web开发的身份证:JWT(json web token)令牌使用方法
Web服务压力测试工具hey(golang)学习二:架构设计(源码学习)
Elastic:索引生命周期管理(Index Lifecycle Management)-减轻ES存储压力
Elasticsearch:delete_by_query使用方法
RabbitMq:消费侧未限流导致的rabbitmq报错异常,消息不能正常消费。
一个异步架构设计:批量消费RabbitMQ,批量写入Elasticsearch(golang实现)
一个优秀的rabbitmq消费者(consumer)设计,可直接上线使用。
不告诉你Sanic Blueprints、Middleware是如此的优雅。
Python web框架sanic+tortoise服务框架搭建(MVP版本)
命令行参数的艺术:Python、Golang、C++技术实现
借助tritonserver完成gpt2模型的本地私有化部署
趴菜就是趴菜,捯饬3天,才搞出小程序头部banner,还是个半成品
前端小趴菜终于把公众号和开发的不能再磕碜的小程序首页关联上了
Elasticsearch高级检索对决:search_after+pit和scroll,谁才是最佳选择?
【续】开发triton客户端,访问clip-vit-large-patch14模型抽取图片特征。
NVIDIA tritonserver实现CLIP-ViT模型工程化:轻松获取图片特征(by grpc or http)
Elasticsearch的pit(point in time)到底是个啥玩意?
一文揭秘:Golang+Elasticsearch轻松搭建AI时代的图片搜索服务
吭哧一天才搞定:elasticsearch向量检索需要的数据集以及768维向量生成
Elasticsearch滚动查询官方推荐方案:search_after检索实现(golang)
elasticsearch查询语言DSL构建包使用及实现原理(golang)
Elasticsearch写入、读取、更新、删除以及批量操作(golang)
学到心理学的这3个知识点,让你在辅导孩子作业时不再鸡飞狗跳,一地鸡毛。
2025越山向海张家口站:从草原天路到崇礼142.6公里,我们一起跑过。
大同华严寺:受人民爱戴的耿市长还会回来吗?薄伽教藏的合掌漏齿菩萨你知道是谁吗?