Go实战:Vue.js + Golang 组合打造应用

GCTT:M1seRy Go语言中文网 2021-09-25

时间回到 2018 年,我写了一篇获得 15k 阅读的文章:Django + Angular 4 = A powerful Web application。出于好奇心,我尝试了 Angular4 和 Django 的组合。接着上个系列,这是一篇使用 Vuejs 和 Golang 来帮助你构建极佳应用的文章。

我知道这两者一起用不是很常见,但是,让我们试一试。

本文是 Go语言中文网组织的 GCTT 翻译,发布在 Go语言中文网公众号。

背景

首先,让我们来聊聊两者提供的技术特征。

Golang

  1. 二进制 —— 所有需要构建的内置依赖项都是二进制文件。因此,您不需要安装运行时来运行应用程序。

  2. 静态类型 —— 编译器不仅在编译过程检查类型,而且在代码编写的过程。处理类型转换和兼容性等问题都有兼顾。

  3. 并发性 —— Golang 最好的特性是它对高并发性的优先支持。

  4. 标准库 —— 标准库功能足够强大,你基本上不需要第三方库。

Vue.js

  1. 体积 —— 经过 gzip 压缩后,它的大小仅为 18kb ,对比压缩后的 jQuery,gzip 压缩后的大小为 29kb。

  2. 可读性 —— Vue.js 的源码和语法非常清晰简单。

  3. 文档 —— Vue.js 完善的文档使它能很快上手和学习。

  4. 灵活 —— 数据在 HTML 和 JavaScript 间的绑定是非常流畅的。

  5. Vue CLI 3 —— cli 提供了一系列的功能让你很快的上手,尝试着使用它你会喜欢上它。

Golang 和 Vuejs 在运行时都很快,所以让他们一起合作构建一个很快的单页面应用。

我们开始构建:

初始化文件目录

首先,像下面这样初始化你的文件目录,为 Git 添加 “LICENSE” 、“README.md” 等文件.

在 backend 文件夹创建一个 'server.go' 文件:

server.go

前端部分,在命令行输入以下命令来创建一个新的 app 应用:

vue create calculator

它会询问你选择 preset 预设,选择默认的即可(babel, eslint).

现在文件目录结构如下:

代码的结构准备好了!

现在让我们看下我们将要做开发的应用,它不是一个很复杂但是可以帮助你开始开发复杂应用。我们将要开发一个计算器,我们在前端输入两个数字,通过 POST 请求发送到 Golang 服务端。服务端将会进行加、减、乘、除,然后通过一个 POST 请求返回结果,前端将会渲染结果。

构建后端

Golang 很快是因为它的编译器,它不允许你定义多余的变量。如果你定义变量或者引入任何 package 包,那么这些变量、包应该是你需要使用的,Golang 在这方面很严格。另外无论你想要做什么,你需要事先告诉给编译器,例如:如果你想使用 POST 获取数据,你必须事先定义返回数据的 JSON 格式。这有点麻烦,但是为了速度这是值得的。

回到代码上。

因此,我们将会使用 encoding/json and net/http 包。然后,我们  定义 JSON 类型的数据结构。

现在,我们将会写一个简单的方法来做数字的运算。这里,我们需要明确指定返回数据的类型。

我们需要写一个方法,当我们使用 POST 方法发送 JSON 格式的请求时,这个方法能够被执行。

在代码第 33 行,我们定义了一个 JSON 的译码器来转译从请求的实体中的传过来的 JSON 数据。

numsData 和 numsResData 是定义好的数据结构。

接收的数据存储在 numsData 中 并且在 38 行被转译。

然后我们设置 ResponseWriter 的 header 头部,并且在 47 行返回 JSON 格式的响应数据以及检查错误。

最后,在这个主函数上,我们可以定义 HTTP 路由,例如 53 行为每个 URL 请求分别定义响应函数。后端服务将运行在 8090 端口上。

完整的代码如下:

现在我们来构建前端

首先使用 cd 进入前端目录并且使用以下命令安装依赖:

npm install --save bootstrap-vue Bootstrap axios vee-validate

我们将使用 axios 来处理 POST 请求,使用 vee-validate 校验表单的输入数据,使用 bootstrap-vue 构建优美的界面。

在 src/Calculator.vue 文件里编写前端部分代码:

从 17 行到 25 行,我们定义 input 输入框和 label 标签来获取数据。在 Vue 中使用 v-model 指令获取数据。

30-35 行完成计算器 UI 层的展示,并且 43 行定义了一个按钮,将会被触发 postreq 方法,这个方法会在接下来完成。

我们在 script 标签内写 JavaScript 代码,首先引入依赖:

54-59 行是必须的,用于引入 axios 和 vee-validate。然后在 64-69 行我们定义一些变量,这些 data 变量用来存储计算器组件的变量的值。

所有的函数都会定义在 methods 对象里。我们创建 postreq() 方法用来向 http://localhost:8090/calc 发送 JSON 格式的 POST 请求。还记得之前在 server.go 文件创建的 calc 方法吗?我们发送 JSON 数据后,后端返回结果后数据会被储存在 addmulsub 和 div 等变量中,这些绑定在 HTML 的变量例如 {{ add }} 的占位符将会显示结果。

很简单是吧?是的。

以上就是所有我们需要做的,只需要记住这些要点:

  • 使用 Golang 写服务端逻辑并且运行在单独的端口上.
  • 构建代码结构来处理 JSON 数据,你不能将它们存储在变量中。
  • 前端的 Vuejs 会使用 GET 或 POST 请求来调用服务端的 API 接口。

运行应用

启动后端服务可以使用以下命令,它将运行在 8090 端口上:

go run server.go

运行前端可以使用:

npm run serve

祝贺!你的 App 完成了。

整个代码托管在这个 Github 仓库[1]上。

并且,如果你想看另一个我使用 Vue.js 和 Golang 构建的应用 Rocket Engine Designer,请点击这里[2]


via: https://medium.com/@adeshg7/vuejs-golang-a-rare-combination-53538b6fb918

作者:Adesh Gautam[3]译者:M1seRy[4]校对:polaris1119[5]

本文由 GCTT[6] 原创编译,Go 中文网[7] 荣誉推出,发布在 Go语言中文网公众号

参考资料

[1]

Github 仓库: https://github.com/adesgautam/Calculator

[2]

这里: https://github.com/adesgautam/Proton

[3]

Adesh Gautam: https://medium.com/@adeshg7

[4]

M1seRy: https://github.com/M1seRy

[5]

polaris1119: https://github.com/polaris1119

[6]

GCTT: https://github.com/studygolang/GCTT

[7]

Go 中文网: https://studygolang.com/

(0)

相关推荐

  • 浅谈vue原理(一)

    哎,不知道多久之前说的要说说vue原理的,后来就忘记了,嘿嘿,这次就来看看vue的大概原理吧! 看过我博客的人应该知道,我不是很喜欢用那种太专业的术语的,喜欢用小白都能看懂的话来说,所以可能有的地方表 ...

  • 如何在vue项目中使用PWA

    pwa ? 这是什么? 第一次听到pwa的时候是隔壁桌的大佬在交流前端的时候说的"这是前端目前很火的技术,用户体验很好,简单方便 ... ...".听起来就很想试一试,在大佬的帮助 ...

  • 我用go-zero开发了第一个线上项目

    作者:结冰 前言 ​说在最前面,我是一个外表谦让,内心狂热,外表斯文,内心贪玩的一个普通人.我的职业是程序员,是一个golang语言爱好者,一半是因为golang好用,一半是因为其他语言学不好.我是从 ...

  • Vuejs的初体验

    邂逅Vue.js中要学习的内容大纲: 1.初识Vue.js (1)为什么学习Vue.js (2)简单认识一下Vue.js 2.Vuejs安装方式 (1)CDN引入 (2)下载和引入 (3)NPM安装管 ...

  • .NETCore3.1+Vue.js打造的低代码工作流引擎

    简介: JNPF采用主流的两大技术.NETCore/JAVA开发,是一套低代码开发平台,可视化开发环境,拖拽式快速设计表单,PC.Pad.手机多端适配,灵活的权限配置.SaaS服务,强大的接口对接,随 ...

  • 获客2000万+/9年互联网实战经验分享:如何打造中老年爆款产品?

    前言: "站在巨人的肩膀上,抓住小程序的流量风口." "中老年行业目前还在人口红利期,中老年逐渐互联网化,获客成本相对较低." "不是每一个创业项目都 ...

  • 7个实用的 Vue.js 工具和库

    前端技术优选 昨天 以下文章来源于前端迷社区 ,作者小迷妹 大家好,我是为前端娱乐圈操碎了心的小迷妹,正宗前端开发一枚,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效 ...

  • vue.js的安装

    公司要开始分配给我做前后端分离项目了555555555555 让我一个java的去了解vue并且还要会搭建=-= 莫得办法那么就开始必不可少的安装环节吧: 第一步! 安装node.js: 首先进入官网 ...

  • 周洁琼靓照太美腻!简约组合打造少女风,樱桃印花袜子精致满分

    上了一定年龄的女生越来越渴望追求纯粹的少女风搭配,找回自己最初那颗诚挚的心.少女风的搭配秘诀在于简约程度的呈现,过多元素的堆砌造就了整套造型的杂乱感,无形间也将少女风冲淡.周洁琼通过简约风的搭配,突显 ...

  • .net core3.1 webapi + vue.js + axios实现跨域

    我所要讲述的是,基于.net core3.1环境下的webapi项目,如何去使用axios对接前端的vue项目 既然谈到axios,这里贴出axios的官方文档地址: http://www.axios ...

  • Vue.js权威指南

    一.遇见Vue.js 1.MVP,从MVC演化而来,Controller/Presenter负责逻辑的处理,完全把View和Model进行了分享,主要的程序逻辑在Presenter里实现,与具体的Vi ...

  • 揭秘 Vue.js 九个性能优化技巧

    这篇文章主要参考了 Vue.js 核心成员 Guillaume Chau 在 19 年美国的 Vue conf 分享的主题:9 Performance secrets revealed,分享中提到了九 ...

  • 邂逅Vue.js – 初始及安装

    邂逅Vue.js中要学习的内容大纲: 1.初识Vue.js (1)为什么学习Vue.js (2)简单认识一下Vue.js 2.Vuejs安装方式 (1)CDN引入 (2)下载和引入 (3)NPM安装管 ...