日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

go html vue,用Go+Vue.js快速搭建一个Web应用(初级demo)

發布時間:2025/4/5 vue 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go html vue,用Go+Vue.js快速搭建一个Web应用(初级demo) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Vue.js做為目前前端最熱門的庫之一,為快速構建并開發前端項目多了一種思維模式。本文給大家介紹用Go+Vue.js快速搭建一個Web應用(初級demo)。

環境準備:

1. 安裝go語言,配置go開發環境;

2. 安裝node.js以及npm環境;

Gin的使用:

為了快速搭建后端應用,采用了Gin作為Web框架。Gin是用Golang實現的一種Web框架,api非常友好,且擁有出色的路由性能和詳細的錯誤提示,如果你想快速開發一個高性能的生產環境,Gin是一個不錯的選擇。

下載和安裝Gin:

go get github.com/gin-gonic/gin

代碼中使用:

import "github.com/gin-gonic/gin"

下面是一個使用Gin的簡單例子:

package main

import "github.com/gin-gonic/gin"

func main() {

r := gin.Default()

r.GET("/ping", func(c *gin.Context) {

c.JSON(200, gin.H{

"message": "pong",

})

})

r.Run() // listen and serve on 0.0.0.0:8080

}

注:Gin可以很方便的支持各種HTTP請求方法以及返回各種類型的數據,詳情可以前往https://github.com/gin-gonic/gin查看。

開始一個項目:

在Gogland(IDE)中新建一個項目:demo,并建立一個main.go文件作為項目入口:

package main

import (

"demo/router"

)

func main() {

router.Init() // init router

}

注: go中package main 必須包含一個main函數。

從上面的代碼可以看到,我們引入了demo下面的router包,并顯式的調用了router的Init()函數, 那現在我們就在demo項目下新建router目錄,并在目錄下建立router.go用于編寫路由規則,代碼如下:

package router

import (

"demo/handlers"

"github.com/gin-gonic/gin"

)

func Init() {

// Creates a default gin router

r := gin.Default() // Grouping routes

// group: v1

v1 := r.Group("/v1")

{

v1.GET("/hello", handlers.HelloPage)

}

r.Run(":8000") // listen and serve on 0.0.0.0:8000

}

在這里,我們創建了一個gin的默認路由,并為其分配了一個組 v1,監聽hello請求并將其路由到視圖函數HelloPage,最后綁定到 0.0.0.0:8000。

現在我們來創建視圖函數,新建handlers目錄,并在目錄下新建hello.go文件,代碼如下:

package handlers

import (

"github.com/gin-gonic/gin"

"net/http"

)

func HelloPage(c *gin.Context) {

c.JSON(http.StatusOK, gin.H{

"message": "welcome",

})

}

C.JSON是Gin實現的返回json數據的內置方法,包含了2個參數,狀態碼和返回的內容。http.StatusOK代表返回狀態碼為200,正文為{"message": "welcome"}。

注:Gin還包含更多的返回方法如c.String, C.HTML, c.XML等,請自行了解。

到現在為止,我們已經實現了最基本的Gin搭建web服務的代碼,運行代碼:

~/gofile/src/demo$ go run main.go

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

- using env: export GIN_MODE=release

- using code: gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET /v1/hello --> demo/handlers.HelloPage (3 handlers)

[GIN-debug] Listening and serving HTTP on :8000

可以看到,我們已經成功啟動web服務器,并監聽本地8000端口,現在可以訪問/v1/hello這個地址了:

curl -XGET 'http://127.0.0.1:8000/v1/hello' -i

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8Date: Mon, 18 Sep 2017 07:38:01 GMT

Content-Length: 21

{"message":"welcome"}

這里服務器已經正確相應了請求,并返回{"message":"welcome"},同時從http請求頭部中可以看到請求的狀態碼為200,返回的數據類型為 Content-Type: application/json。

再來看看服務端的控制臺的輸出信息:

[GIN] 2017/09/18 - 15:37:46 | 200 | 81.546μs | 127.0.0.1 | GET /v1/hello

到這里,我們已經成功的搭建了一套簡單的web服務器。但是在真實情況下,我們肯定會跟服務器產生數據的交流,接下來看看Gin是如何接收參數的。

Gin 參數使用

在restful廣泛流行的情況下,Gin可以很方便的接收url參數:

我們在之前的組v1路由下新定義一個路由:

v1 := r.Group("/v1")

{

v1.GET("/hello", handlers.HelloPage)

v1.GET("/hello/:name", func(c *gin.Context) {

name := c.Param("name")

c.String(http.StatusOK, "Hello %s", name)

})

}

接下來訪問:

curl -XGET 'http://127.0.0.1:8000/v1/hello/lilei' -i

HTTP/1.1 200 OK

Content-Type: text/plain; charset=utf-8

Date: Mon, 18 Sep 2017 08:03:02 GMT

Content-Length: 11

Hello lilei

可以看到,通過c.Param("key")方法,Gin成功捕獲了url請求路徑中的參數。Gin也可以接收常規參數,如下:

v1.GET("/welcome", func(c *gin.Context) {

firstname := c.DefaultQuery("firstname", "Guest")

lastname := c.Query("lastname")

c.String(http.StatusOK, "Hello %s %s", firstname, lastname)

})

同樣,我們訪問:

curl -XGET 'http://127.0.0.1:8000/v1/welcome?firstname=li&lastname=lei' -i

HTTP/1.1 200 OK

Content-Type: text/plain; charset=utf-8Date: Mon, 18 Sep 2017 08:11:37 GMT

Content-Length: 12

Hello li lei

通過c.Query("key")可以成功接收到url參數,c.DefaultQuery在參數不存在的情況下,會由其默認值 Guest代。

注:Gin還可以接收更多不同類型的參數,請查看Gin的文檔;

Gin返回靜態頁面

我們在網站開發中肯定會涉及到靜態資源的處理,下面是Gin返回靜態頁面,以及實現數據交互的簡單例子。

新建templates目錄,并目錄下新建index.html,內容如下:

{{ .title }}

新建一個group v2,并創建/index路由,返回靜態html頁面:

r.LoadHTMLGlob("templates/*")

v2 := r.Group("/v2")

{

v2.GET("/index", func(c *gin.Context) {

c.HTML(http.StatusOK, "index.html", gin.H{ "title": "hello Gin.",

})

})

}

使用LoadHTMLGlob定義模板文件路徑,用c.HTML返回靜態頁面。訪問:

curl -XGET 'http://127.0.0.1:8000/v2/index' -i

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Date: Mon, 18 Sep 2017 08:29:13 GMT

Content-Length: 55

hello Gin.

Gin返回了靜態文件index.html,并把title數據填充到了模板 {{ .title }}

注:關于模板語言的使用,讀者自行補充。當然靜態資源我們也可以交由nginx等來處理,減少服務器壓力。

Gin默認路由

我們還可以為Gin定義一些默認路由:

// 404 NotFound

r.NoRoute(func(c *gin.Context) {

c.JSON(http.StatusNotFound, gin.H{

"status": 404,

"error": "404, page not exists!",

})

})

這時候,我們訪問一個不存在的頁面:

curl -XGET 'http://127.0.0.1:8000/v2/notfound' -i

HTTP/1.1 404 Not Found

Content-Type: application/json; charset=utf-8

Date: Mon, 18 Sep 2017 09:22:38 GMT

Content-Length: 46

{"error":"404, page not exists!","status":404}

Gin 中間件

在go的net/http中我們可以很方便的設計中間件,同樣Gin也為我們提供了很方便的中間件使用。 我們可以定義全局中間件,群組中間件和單個路由的中間件,可以限定中間件的作用范圍。

先定義一個簡單的中間件,并將其設為全局中間件:

// PrintMiddleware is a function for test middleware

func PrintMiddleware(c *gin.Context) {

fmt.Println("before request")

c.Next()

}

接下來注冊為全局中間件:

r := gin.Default()

r.Use(PrintMiddleware())

然后我們發起客戶端請求并查看Gin控制臺輸出:

curl -XGET 'http://127.0.0.1:8000/v2/index' -i

[GIN-debug] Listening and serving HTTP on :8000

before request

[GIN] 2017/09/18 - 17:42:50 | 200 | 809.559μs | 127.0.0.1 | GET

/v2/index

可以看到Gin在執行請求前,成功執行了自定義的中間件函數,c.Next()表示當中間件執行完成之后,將請求傳遞給下一個函數處理。

上面定義了一個全局中間件,現在我們想對v2組的請求進行一次驗證(模擬登錄),假設請求中包含一個token參數,存儲認證信息,我們來實現這個中間件函數:

func ValidateToken() gin.HandlerFunc {

return func(c *gin.Context) {

token := c.Request.FormValue("token")

if token == "" {

c.JSON(401, gin.H{

"message": "Token required",

})

c.Abort()

return

}

if token != "accesstoken" {

c.JSON(http.StatusOK, gin.H{

"message": "Invalid Token",

})

c.Abort()

return

}

c.Next()

}

}

然后我們在group v2組注冊這個中間件:

v2.Use(ValidateToken())

接下來我們還是像往常一樣訪問:

curl -XGET 'http://127.0.0.1:8000/v2/index' -i

HTTP/1.1 401 Unauthorized

Content-Type: application/json; charset=utf-8

Date: Mon, 18 Sep 2017 10:01:10 GMT

Content-Length: 32

{"message":"Token required"}

提示我們Token required, 當我們加上token時:

curl -XGET 'http://127.0.0.1:8000/v2/index?token=accesstoken' -i

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Date: Mon, 18 Sep 2017 10:02:28 GMT

Content-Length: 29

hello Gin.

可以看到已經通過驗證,Gin正確響應了請求。c.Abort()表示請求被終止。

看到這里,相信大家對Gin已經有了大致了解,可以動手擼自己的代碼了。在實際開發中,會遇到各種各樣的需求,這時候就需要多方查閱資料,尋找答案了。

vue.js使用

vue.js是當下很火的前端框架,我們可以使用vue.js和Gin來搭建前后端分離應用。

vue開發環境搭建:

1. 安裝node.js和npm。

2. npm安裝vue腳手架vue-cli:

npm install vue-cli -g // 全局安裝

vue-cli 是一個官方發布的 vue.js 項目腳手架,使用 vue-cli 可以快速創建 vue 項目。 GitHub地址:https://github.com/vuejs/vue-cli

3. 接下來使用vue-cli創建一個項目,采用官方的webpack模板:

vue init webpack demo

這里采用默認設置即可,一路按下Enter,會提示安裝完成,進入項目

cd demo

安裝依賴(需要耐心等待一段時間):

npm install

4. 啟動開發服務器:

npm run dev

訪問:http://localhost:8080,可以看到vue官方為我們搭建好的初始化頁面了。

到這里,我們很方便的搭建好了vue初始項目模板,那么我們怎么實現前后端分離的數據交互工作呢?接下來,用一個最近使用過小案例來演示數據交互。

使用echarts畫一張簡單的圖表

1. 在src目錄下新建views目錄,用來存放視圖(目錄結構):

src

├── App.vue

├── assets

│ └── logo.png

├── components

│ └── HelloWorld.vue

├── main.js

├── router

│ └── index.js

└── views

├── ChartLine.vue

└── index.js

2. 安裝稍后會使用到的組件:

npm install echarts --save-dev // echarts

npm install axios --save-dev // 一個異步http請求庫

3. 新建ChartLine.vue文件用來展示折線圖。內容如下:

刷新

import echarts from 'echarts'

import axios from 'axios'

export default {

name: 'ChartLine',

computed: {

opt () { // option可以參照echarts官方案例

return {

title: {

text: '堆疊區域圖'

},

tooltip: {

// 省略, 參數詳看echarts官方案例

},

legend: {

data: ['郵件營銷']

},

grid: {

// 省略

},

xAxis: [

{

// 省略

data: []

}

],

yAxis: [

// 省略

],

series: [

{

name: '郵件營銷',

type: 'line',

data: []

}

]

}

}

},

methods: {

async refreshCharts () {

const res = await axios.get('http://127.0.0.1:8000/api/v1/line')

this.myChart.setOption({ // 更新數據

xAxis: {

data: res.data.legend_data

},

series: {

data: res.data.xAxis_data

}

})

}

},

mounted () {

this.myChart = echarts.init(document.getElementById('line'))

this.myChart.setOption(this.opt) // 初始化echarts

window.addEventListener('resize', this.myChart.resize) // 自適應

}

}

.line {

width: 400px;

height: 200px;

margin: 20px auto;

}

以上代碼實現了echarts圖表初始化和數據填充的過程,以及點擊按鈕刷新圖表的功能;

4. 注冊路由,編輯router/index.js:

import Vue from 'vue'

import Router from 'vue-router'

import ChartLine from '../views/ChartLine.vue'

Vue.use(Router)

export default new Router({

mode: 'history',

routes: [

{

path: '/line',

name: 'Line',

component: ChartLine

}

]

})

5. Gin后臺api接口實現:

v1.GET("/line", func(c *gin.Context) {

legendData := []string{"周一", "周二", "周三", "周四", "周五", "周六", "周日"}

xAxisData := []int{120, 240, rand.Intn(500), rand.Intn(500), 150, 230, 180}

c.JSON(200, gin.H{

"legend_data": legendData,

"xAxis_data": xAxisData,

})

})

6. 現在我們就能正確看到圖表了,試著點擊刷新按鈕可以看到圖表正確刷新了數據。

總結

以上所述是小編給大家介紹的用Go+Vue.js快速搭建一個Web應用(初級demo),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

總結

以上是生活随笔為你收集整理的go html vue,用Go+Vue.js快速搭建一个Web应用(初级demo)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av在线播放观看 | 日本人体一区 | 欧美一级片免费看 | 人人妻人人澡人人爽欧美一区 | 日本xxxxxⅹxxxx69| 精品成人免费一区二区在线播放 | 福利视频免费 | 久久艹影院| 欧美另类亚洲 | 日韩av大片在线观看 | 国产一伦一伦一伦 | 国产麻豆免费观看 | 欧美日韩一卡二卡三卡 | www九九九| 欧美xxxxx牲另类人与 | 男男野外做爰全过程69 | 日韩视频中文字幕在线观看 | 狠狠干女人 | 日本乱淫视频 | 国内精品一区二区 | a级一级片 | 在线观看的网站 | 国产午夜伦理 | 久久天堂| 国产人妖在线视频 | 欧美亚洲国产一区二区三区 | 一级大片免费看 | 欧美日韩一区二区三区在线观看 | 麻豆md0034在线观看 | 免费吸乳羞羞网站视频 | 中文字幕激情小说 | 国内外免费激情视频 | 国产农村妇女精品一区二区 | 婷婷免费视频 | 少妇高潮av久久久久久 | 无码人妻精品一区二区三区夜夜嗨 | 日韩午夜视频在线观看 | 一区二区在线 | 国产第一色 | 星空无限mv国产剧入选 | 中文幕无线码中文字夫妻 | 国产又黄又嫩又滑又白 | 波多在线视频 | 在线免费观看黄色小视频 | 久久咪咪 | 风间由美一区二区三区 | a级片久久| 免费视频www在线观看网站 | 久久久这里有精品 | 四房婷婷 | 国产视频一区在线播放 | 欧美一级片在线播放 | 成人做爰www看视频软件 | 国产精品久久久亚洲 | 久久精品中文 | 久久澡 | 91成人在线观看喷潮 | 大黄一级片| 福利社91| 日韩欧美视频一区二区 | 麻豆资源 | 国产精品com | 成人在线手机视频 | 日韩中文字幕亚洲精品欧美 | 欧美成人性生活 | 国产黑丝av| 中文字幕一区二区三区精华液 | 中文av网| 久久成人久久 | 国产操操操 | 亚洲精品影院在线 | 最近中文字幕在线mv视频在线 | 国产精品电影一区二区三区 | 国产欧美日韩专区 | 看91| 波多野结衣精品在线 | 免费观看av网址 | 成人乱人乱一区二区三区 | 黄色三级在线播放 | av成人 | 性色tv| 清清草在线视频 | 日本午夜一区二区三区 | 亚洲色图制服诱惑 | 800av免费在线观看 | 欧美成人一区在线 | 欧美少妇喷水 | 炕上如狼似虎的呻吟声 | 啪啪自拍视频 | 97精品一区二区视频在线观看 | 国产人妖ts | 18视频在线观看男男 | 国产福利久久 | 久久蜜桃视频 | 韩国三级av | 亚洲成人网在线观看 | 五月天激情小说 | 国产色无码精品视频国产 | 久久久久婷婷 |