cari
Rumahpembangunan bahagian belakangGolangGunakan rangka kerja Gin untuk melaksanakan fungsi visualisasi dan pelaporan data

Dalam pembangunan perisian moden, visualisasi data dan fungsi pelaporan semakin mendapat perhatian, kerana ia boleh membantu pengguna memahami dan menganalisis data dengan lebih baik, serta membantu perusahaan mengurus perniagaan mereka dan membuat keputusan dengan lebih baik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Gin untuk melaksanakan visualisasi data dan fungsi pelaporan untuk membantu pembaca mempelajari dan menggunakan teknologi ini dengan lebih baik.

Rangka kerja Gin ialah rangka kerja web yang ringan berdasarkan bahasa Go dan mempunyai ciri prestasi tinggi dan kesederhanaan penggunaan. Konsep reka bentuknya adalah untuk menyediakan satu set alat asas (penghalaan, perisian tengah, pemaparan) untuk memenuhi keperluan asas pembangunan web, dan boleh diperluas dan disesuaikan dengan mudah. Oleh itu, aplikasi web yang cekap, berskala dan mudah diselenggara boleh dibangunkan dengan cepat menggunakan rangka kerja Gin.

Fungsi visualisasi dan pelaporan data yang diperkenalkan dalam artikel ini adalah berdasarkan API RESTful yang disediakan oleh rangka kerja Gin dan rangka kerja bahagian hadapan yang disediakan oleh Vue.js. Vue.js ialah rangka kerja JavaScript popular yang menyokong pembangunan komponen dipacu data, menjadikannya lebih mudah untuk membangunkan aplikasi bahagian hadapan yang kompleks. Pada masa yang sama, Vue.js juga menyediakan banyak pemalam dan komponen untuk melaksanakan visualisasi data dan fungsi pelaporan, seperti pemalam seperti ECharts dan DataTables.

Pertama, kita perlu mencipta aplikasi web berdasarkan rangka kerja Gin dan mentakrifkan beberapa API RESTful untuk mengendalikan permintaan data. Dalam contoh ini, kami menganggap bahawa kami perlu memaparkan beberapa data jualan, termasuk jualan, volum pesanan, kategori produk, dsb. Kami boleh mentakrifkan API berikut:

  • DAPATKAN /api/sales: Mengembalikan senarai semua data jualan.
  • DAPATKAN /api/sales/:id: Mengembalikan butiran data jualan tertentu.
  • POST /api/sales: Buat data jualan baharu.
  • PUT /api/sales/:id: Kemas kini maklumat untuk data jualan tertentu.
  • DELETE /api/sales/:id: Padamkan data jualan tertentu.

Sangat mudah untuk menentukan API dalam rangka kerja Gin Anda hanya perlu menggunakan kaedah dan laluan HTTP yang sepadan, dan mengikat fungsi pemprosesan yang sepadan. Contohnya:

func main() {
    r := gin.Default()

    r.GET("/api/sales", getSales)
    r.GET("/api/sales/:id", getSale)
    r.POST("/api/sales", createSale)
    r.PUT("/api/sales/:id", updateSale)
    r.DELETE("/api/sales/:id", deleteSale)

    r.Run()
}

func getSales(c *gin.Context) {
    // TODO: 返回所有销售数据的列表。
}

func getSale(c *gin.Context) {
    id := c.Param("id")
    // TODO: 返回某个特定销售数据的详细信息。
}

func createSale(c *gin.Context) {
    // TODO: 创建一条新的销售数据。
}

func updateSale(c *gin.Context) {
    id := c.Param("id")
    // TODO: 更新某个特定销售数据的信息。
}

func deleteSale(c *gin.Context) {
    id := c.Param("id")
    // TODO: 删除某个特定销售数据。
}

Seterusnya, kita perlu menggunakan Vue.js untuk mencipta aplikasi bahagian hadapan dan menggunakan pemalam seperti ECharts dan DataTables untuk melaksanakan fungsi visualisasi dan pelaporan data. Pertama, kita perlu menggunakan Vue.js untuk membuat halaman mudah, termasuk jadual dan beberapa carta, untuk memaparkan data jualan. Contohnya:

<template>
  <div>
    <div>
      <table id="sales-table"></table>
    </div>
    <div>
      <div id="sales-chart1"></div>
      <div id="sales-chart2"></div>
    </div>
  </div>
</template>

<script>
import $ from 'jquery'
import 'datatables.net-bs4'
import echarts from 'echarts'

export default {
  name: 'SalesPage',
  data () {
    return {
      sales: []
    }
  },
  mounted () {
    this.loadSales()
  },
  methods: {
    loadSales () {
      $.ajax({
        url: '/api/sales',
        type: 'GET',
        success: (data) => {
          this.sales = data
          this.renderTable()
          this.renderCharts()
        }
      })
    },
    renderTable () {
      $('#sales-table').DataTable({
        data: this.sales,
        columns: [
          { title: 'ID', data: 'id' },
          { title: 'Amount', data: 'amount' },
          { title: 'Quantity', data: 'quantity' },
          { title: 'Product', data: 'product' },
          { title: 'Category', data: 'category' }
        ]
      })
    },
    renderCharts () {
      const chart1 = echarts.init(document.getElementById('sales-chart1'))
      const chart2 = echarts.init(document.getElementById('sales-chart2'))

      // TODO: 渲染图表数据。
    }
  }
}
</script>

Dalam halaman ini, kami menggunakan DataTables untuk memaparkan data jualan dalam jadual dan ECharts untuk memaparkan data jualan dalam bentuk carta. Kami memanggil GET /api/sales sekali dalam kaedah loadSales untuk memuatkan data jualan dan menghantar data jualan kepada kaedah renderTable dan renderCharts untuk menggunakan DataTables dan ECharts untuk memaparkan data. Dalam kaedah renderTables, kami menggunakan pemalam DataTable jQuery untuk memaparkan jadual, dan dalam kaedah renderCharts, kami menggunakan ECharts untuk memaparkan carta.

Seterusnya, kita perlu melaksanakan fungsi pemprosesan yang ditakrifkan dalam API RESTful untuk mengendalikan permintaan data. Dalam contoh ini, kita boleh menggunakan SQLite sebagai pangkalan data dan Gorm sebagai rangka kerja ORM untuk mengendalikan pangkalan data. Pada masa yang sama, kami juga perlu menggunakan beberapa pemalam untuk membantu kami dengan pemprosesan dan pengesahan data, seperti gommon/pengesahan dan pemalam lain. Contohnya:

import (
  "github.com/gin-gonic/gin"
  "github.com/jinzhu/gorm"
  _ "github.com/mattn/go-sqlite3"
  "github.com/wbsnail/articles/GinDataVisualization/internal/sales"
  "gopkg.in/go-playground/validator.v9"
)

type SaleInput struct {
  Amount   float64 `json:"amount" validate:"required"`
  Quantity int     `json:"quantity" validate:"required"`
  Product  string  `json:"product" validate:"required"`
  Category string  `json:"category" validate:"required"`
}

func main() {
  db, err := gorm.Open("sqlite3", "sales.db")
  if err != nil {
    panic("failed to connect database")
  }
  defer db.Close()

  db.AutoMigrate(&sales.Sale{})

  r := gin.Default()

  r.GET("/api/sales", getSales)
  r.GET("/api/sales/:id", getSale)
  r.POST("/api/sales", createSale)
  r.PUT("/api/sales/:id", updateSale)
  r.DELETE("/api/sales/:id", deleteSale)

  r.Run()
}

func getSales(c *gin.Context) {
  db := c.MustGet("db").(*gorm.DB)
  var sales []sales.Sale
  db.Find(&sales)
  c.JSON(http.StatusOK, sales)
}

func getSale(c *gin.Context) {
  db := c.MustGet("db").(*gorm.DB)
  var sale sales.Sale
  if err := db.Where("id = ?", c.Param("id")).First(&sale).Error; err != nil {
    c.AbortWithStatus(http.StatusNotFound)
  } else {
    c.JSON(http.StatusOK, sale)
  }
}

func createSale(c *gin.Context) {
  db := c.MustGet("db").(*gorm.DB)
  var input SaleInput
  if err := c.ShouldBindJSON(&input); err != nil {
    c.AbortWithStatus(http.StatusBadRequest)
  } else if err := validate.Struct(input); err != nil {
    c.AbortWithStatus(http.StatusBadRequest)
  } else {
    sale := sales.Sale{Amount: input.Amount, Quantity: input.Quantity, Product: input.Product, Category: input.Category}
    db.Create(&sale)
    c.JSON(http.StatusOK, sale)
  }
}

func updateSale(c *gin.Context) {
  db := c.MustGet("db").(*gorm.DB)
  var input SaleInput
  if err := c.ShouldBindJSON(&input); err != nil {
    c.AbortWithStatus(http.StatusBadRequest)
  } else if err := validate.Struct(input); err != nil {
    c.AbortWithStatus(http.StatusBadRequest)
  } else {
    var sale sales.Sale
    if err := db.Where("id = ?", c.Param("id")).First(&sale).Error; err != nil {
      c.AbortWithStatus(http.StatusNotFound)
    } else {
      sale.Amount = input.Amount
      sale.Quantity = input.Quantity
      sale.Product = input.Product
      sale.Category = input.Category
      db.Save(&sale)
      c.JSON(http.StatusOK, sale)
    }
  }
}

func deleteSale(c *gin.Context) {
  db := c.MustGet("db").(*gorm.DB)
  var sale sales.Sale
  if err := db.Where("id = ?", c.Param("id")).First(&sale).Error; err != nil {
    c.AbortWithStatus(http.StatusNotFound)
  } else {
    db.Delete(&sale)
    c.Status(http.StatusOK)
  }
}

Dalam contoh ini, kami mentakrifkan struktur SaleInput untuk mewakili format input data jualan dan menggunakan validate untuk mengesahkan kesahihan data input. Dalam kaedah createSale dan updateSale, kami menukar data input kepada struktur Jualan dan menggunakan db.Create dan db.Save untuk membuat atau mengemas kini data jualan. Dalam kaedah getSales, getSale dan deleteSale, kami menggunakan db.Find, db.Where dan db.Delete untuk bertanya dan memadam data jualan. Dalam semua fungsi pemprosesan, kami menggunakan db := c.MustGet("db").(*gorm.DB) untuk mendapatkan objek sambungan pangkalan data Ini kerana kami telah mendaftarkannya semasa membuat aplikasi untuk mewujudkan sambungan pangkalan data dan simpan objek sambungan dalam c.Keys["db"], supaya kita boleh menggunakan objek sambungan dalam setiap fungsi pemprosesan permintaan.

Akhir sekali, kita perlu mengikat halaman web dan API RESTful melalui rangka kerja Gin, supaya pengguna boleh mengakses dan mengendalikan data dengan mengakses halaman web. Dalam contoh ini, kita boleh menggunakan perisian tengah render HTML (atau JSON render) yang disediakan oleh rangka kerja Gin untuk mengikat halaman web dan API RESTful. Contohnya:

func main() {
  db, err := gorm.Open("sqlite3", "sales.db")
  if err != nil {
    panic("failed to connect database")
  }
  defer db.Close()

  db.AutoMigrate(&sales.Sale{})

  r := gin.Default()

  r.Use(func(c *gin.Context) {
    c.Set("db", db)
    c.Next()
  })

  r.GET("/", func(c *gin.Context) {
    c.HTML(http.StatusOK, "index.html", nil)
  })

  r.GET("/api/sales", getSales)
  r.GET("/api/sales/:id", getSale)
  r.POST("/api/sales", createSale)
  r.PUT("/api/sales/:id", updateSale)
  r.DELETE("/api/sales/:id", deleteSale)

  r.Run()
}

Dalam contoh ini, kami mendaftarkan perisian tengah untuk menyimpan objek sambungan pangkalan data ke dalam c.Keys["db"], dan kemudian mengikat GET/permintaan menggunakan perisian perisian tengah render HTML untuk memaparkan halaman index.html. Dengan cara ini, kita boleh mengakses halaman Web dengan mengakses http://localhost:8080.

Ringkasnya, menggunakan rangka kerja Gin untuk melaksanakan fungsi visualisasi dan pelaporan data ialah teknologi yang sangat praktikal dan berguna. Ia boleh membantu kami memahami dan menganalisis data perniagaan dengan lebih baik serta membantu kami membuat keputusan yang lebih baik dan meningkatkan pengurusan kecekapan perusahaan. Melalui kajian dan amalan artikel ini, kita boleh menguasai teknologi ini dengan lebih baik dan mengaplikasikannya pada pembangunan sebenar.

Atas ialah kandungan terperinci Gunakan rangka kerja Gin untuk melaksanakan fungsi visualisasi dan pelaporan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
酷炫,Python实现交通数据可视化!酷炫,Python实现交通数据可视化!Apr 11, 2023 pm 07:52 PM

1、TransBigData简介TransBigData为处理常见的交通时空大数据(如出租车GPS数据、共享单车数据和公交车GPS数据等)提供了快速而简洁的方法。TransBigData为交通时空大数据分析的各个阶段提供了多种处理方法,代码简洁、高效、灵活、易用,可以用简洁的代码实现复杂的数据任务。目前,TransBigData主要提供以下方法: 数据预处理:对数据集提供快速计算数据量、时间段、采样间隔等基本信息的方法,也针对多种数据噪声提供了相应的清洗方法。 数据栅格化:提供在研究区域内生成、

Python 获取旅游景点信息及评论并作词云、数据可视化Python 获取旅游景点信息及评论并作词云、数据可视化Apr 11, 2023 pm 08:49 PM

大家好,我是啃书君!正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢?今天将手把手教你使用线程池爬取同程旅行的景点信息及评论数据并做词云、数据可视化!!!带你了解各个城市的游玩景点信息。在开始爬取数据之前,我们首先来了解一下线程。线程进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程:是轻量级的进程,是程序执行的最小单元,是进程的一个执行路径。一

如何使用 Go 语言进行数据可视化分析?如何使用 Go 语言进行数据可视化分析?Jun 10, 2023 am 10:46 AM

随着大数据时代的到来,数据可视化分析在各行各业中扮演着至关重要的角色。而Go语言作为一种快速、高效、安全的编程语言,也逐渐在数据可视化分析领域占据一席之地。本文将探讨如何使用Go语言进行数据可视化分析。一、Go语言常用的数据可视化库Plotly:可用于在浏览器中创建交互式的图形,支持多种图形类型,如线图、条形图、散点图、热力图等。Gonum/plo

使用PHP和Chart.js创建多图表数据可视化应用程序使用PHP和Chart.js创建多图表数据可视化应用程序May 11, 2023 am 09:27 AM

随着互联网的不断发展,大量的数据被生成并存储在各种网络应用程序和系统中,尤其是像电子商务、社交网络、金融和制造业等领域。为了从这些数据中汲取更多的信息,数据可视化已成为一种流行的方法。通过将数据转换为图形形式,用户可以更加容易地理解和分析数据。在本文中,我们将介绍如何使用PHP和Chart.js来创建多图表数据可视化应用程序。什么是Chart.js?Char

聊聊vue3中怎么使用高德地图api聊聊vue3中怎么使用高德地图apiMar 09, 2023 pm 07:22 PM

在我们使用高德地图的时候,官方给我们推荐了很多案例,demo,但是这些案例都是使用原生方法接入,并没有提供vue或者react 的demo,vue2的 接入网上也很多人都有写过,下面本篇文章就来看看 vue3怎么使用常用的高德地图api,希望对大家有所帮助!

基于Java的数据可视化工具和应用介绍基于Java的数据可视化工具和应用介绍Jun 18, 2023 am 09:16 AM

近年来,随着数据的爆炸性增长和互联网技术的不断发展,数据可视化成为越来越受关注的领域。数据可视化是将数据转化为易于理解和分析的图形化形式,帮助人们更快速和准确地理解数据。而基于Java的数据可视化工具和应用则成为了当前比较热门的技术。Java的数据可视化工具和应用优势应用范围广Java语言有很强的跨平台性,可以在不同操作系统上安装和运行,而且可以通过Java

Vue 中实现柱状图、饼图等数据可视化技巧Vue 中实现柱状图、饼图等数据可视化技巧Jun 25, 2023 pm 12:43 PM

近年来,数据可视化相关技术的快速发展,使得复杂数据更易于被理解和分析。Vue作为一种流行的前端框架,具有良好的可扩展性和易用性,被广泛应用于数据可视化领域。本文将介绍Vue中实现柱状图、饼图等数据可视化的技巧。一、使用ECharts实现柱状图ECharts是一款基于JavaScript的开源可视化库,提供了多种图表类型,其中包括柱状图。下面以

在PHP中使用D3.js创建漂亮的数据可视化在PHP中使用D3.js创建漂亮的数据可视化Jun 19, 2023 pm 02:42 PM

随着互联网时代的到来,数据已经成为了我们生活和工作中必不可少的一部分。在处理和分析数据的过程中,数据可视化已经成为了一种非常流行的技术。数据可视化可以让我们更好地理解数据,发现数据中的规律和趋势,同时更好地向别人展示数据分析结果。在本文中,我们将会介绍如何在PHP中使用D3.js创建漂亮的数据可视化。一、什么是D3.jsD3.js(Data-DrivenD

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa