golang开发:环境篇(五)实时加载工具gin的使用
gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率。
为什么要使用gin
我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须重新编译一次,即go build .像我们从事go web的开发,可能是从其他解释型语言跨过来的,就特别的不适应这种调试开发,改完代码需要编译go build。然后,gin的出现就为了解决这种需求。
看下gin 的官方解释
gin是一个简单的命令行实用程序,用于实时重新加载Go Web应用程序。 只需在您的应用程序目录中运行gin ,您的网络应用程序将以 gin 作为代理服务。 当gin检测到有代码更改时,它会自动重新编译代码。 您的应用将在下次收到HTTP请求时重新启动。
安装 gin
当然,第一是当然是在我们的虚拟机中安装 gin
vagrant ssh
go get github.com/codegangsta/gin
gin -h
NAME:
gin - A live reload utility for Go web applications.
USAGE:
gin [global options] command [command options] [arguments...]
VERSION:
0.0.0
COMMANDS:
run, r Run the gin proxy in the current working directory
env, e Display environment variables set by the .env file
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--laddr value, -l value listening address for the proxy server [$GIN_LADDR]
--port value, -p value port for the proxy server (default: 3000) [$GIN_PORT]
--appPort value, -a value port for the Go web server (default: 3001) [$BIN_APP_PORT]
--bin value, -b value name of generated binary file (default: "gin-bin") [$GIN_BIN]
出现上面的提示信息表示安装成功了。
使用gin
了解平常开发中使用最多的几个gin的命令
--laddr value, -l value listening address for the proxy server [$GIN_LADDR]
监听代理服务器的地址 系统变量[$GIN_LADDR]
--port value, -p value port for the proxy server (default: 3000) [$GIN_PORT]
代理服务器的端口号 默认3000 系统变量[$GIN_PORT]
--appPort value, -a value port for the Go web server (default: 3001) [$BIN_APP_PORT]
转发给Go web服务的端口 默认3001 系统变量[$BIN_APP_PORT]
--bin value, -b value name of generated binary file (default: "gin-bin") [$GIN_BIN]
Go生成的二进制可执行文件的名称 默认gin-bin 系统变量[$GIN_BIN]
--path value, -t value Path to watch files from (default: ".") [$GIN_PATH]
监听文件改动的目录 默认 . 系统变量[$GIN_PATH]
--build value, -d value Path to build files from (defaults to same value as --path) [$GIN_BUILD]
编译Go 程序的目录 默认 . 系统变量[$GIN_BUILD]
--all reloads whenever any file changes, as opposed to reloading only on .go file change 系统变量[$GIN_ALL]
监听所有文件的修改,都会重新编译。如果不加all就只会监听go文件的修改 系统变量[$GIN_ALL]
可以使用后面的系统变量名进行这些变量设置
这几个命令掌握了基本平常开发就没啥问题了。
举个栗子
新建一个web服务
看下Go的简单的web服务代码
package main
import (
"fmt"
"net/http"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello world!")
}
func main() {
http.HandleFunc("/", sayhelloName)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
这段代码编译完成后,启动WEB服务后会监听9090端口。
我们使用 gin 来编译启动这个服务
我的物理机到虚拟机映射的是
192.168.0.10
配置
Vagrant.configure("2") do |config|
config.vm.box = "base"
config.vm.box_check_update = false
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.0.10"
config.vm.synced_folder "/data/www","/data/www",create:true
config.ssh.username = "root"
config.ssh.private_key_path = "/Users/XXX/.ssh/id_rsa"
end
我们vagrant 登录虚拟机启动服务
sudo vagrant ssh
cd 项目目录
gin -p 3000 -a 9090 -b test.bin --all run
表示监听虚拟机的3000端口,将请求转发给9000端口,生成的二进制执行文件 test.bin,所有文件的改动都会引起项目编译
当然了上面的参数都是可以在后面添加的,path和build都在当前目录下,所以就使用默认的 .
我们curl测试下
curl http://192.168.0.10:3000
Hello world!
我们修改下输出文件
fmt.Fprintf(w, "Hello China!")
Ctrl+S保存的时候看到有编译的信息
[gin] Building...
[gin] Build finished
我们再次测试下
curl http://192.168.0.10:3000
Hello China!
当然了,我们也可以使用系统变量的方式,启动 gin服务
创建test.sh
export GIN_PORT="3000"
export BIN_APP_PORT="9090"
export GIN_BIN="test.bin"
export GIN_ALL=1
gin run
chmod +x test.sh
./test.sh
跟上面的命令行的结果一毛一样。
完结
有了Gin之后,go web调试基本就跟PHP NODE等的解释型语言一样了,不用每次都go build之后再发请求测试,只需要启动 shell脚本,gin自动帮你在改动代码的时候编译。
想要了接更多,关注下 gin的官方 说明
https://github.com/codegangsta/gin
golang开发:环境篇(五)实时加载工具gin的使用的更多相关文章
- iOS开发UI篇-懒加载、重写setter方法赋值
一.懒加载 1.懒加载定义 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再 ...
- IOS开发UI篇之──自定义加载等待框(MBProgressHUD)
本文转载至 http://blog.csdn.net/xunyn/article/details/8064984 原文地址http://www.189works.com/article-89289 ...
- golang开发:环境篇(六) Go运行监控Supervisord的使用
为什么要使用Supervisord 17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了.到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功 ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
- golang开发:环境篇(四)包管理器 glide的使用
glide 是golang项目开发中是特别重要的软件,没有它,golang的项目可能都无法发布. 为什么要使用glide 平时我们开发Go项目的时候,使用第三方的包的时候都直接使用go get 去获取 ...
- golang开发:类库篇(五)go测试工具goconvey的使用
为什么要使用goconvey测试程序 goconvey 集成go test,go test 无缝接入.管理运行测试用例,而且提供了丰富的函数断言.非常友好的WEB界面,直观的查看测试结果. 如果没有g ...
- golang开发:环境篇(七) Go mod 使用
Glide用的好好的,为什么要使用Modules 在 Go 1.11 中 ,官方加入package management tool,称为Go Modules.Go mod 没有出现之前,用的最多的包管 ...
- Golang开发环境搭建-Vim篇
一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...
- 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...
随机推荐
- 【微信小程序】scroll-view 的上拉加载和下拉刷新
1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...
- 树莓派python 控制GPIO
sudo pip install rpi.gpio #!/usr/bin/env python # encoding: utf-8 import RPi.GPIO as GPIO import tim ...
- AndoridSQLite数据库开发基础教程(8)
AndoridSQLite数据库开发基础教程(8) 添加索引 索引是一种通过预先排序和对表的一个或多个列构建索引表来优化数据库查找的手段.下面为表添加索引,操作步骤如下: (1)在打开的数据库中,单击 ...
- python声明类时继承不继承object类的区别
不加的叫做经典类或旧式类,但是现在python3的类都默认是继承了object的,所以可写可不写 下面举个例子说明: 首先说明下__class__功能与用法: __class__功能和type()函数 ...
- centos的6.9版本安装mysql
用yum安装后,执行service命令启动: [root@centos ~]# yum install mysql-server Loaded plugins: fastestmirror, secu ...
- 宣化上人:大佛顶首楞严经四种清净明诲浅释(4-5)(转自学佛网:http://www.xuefo.net/nr/article23/230699.html)
大佛顶首楞严经四种清净明诲浅释(4) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 汝教世人修三摩地.先断心淫.是名如来.先佛世尊.第一决定清净明诲. 所以说,教人这个爱的 ...
- Sqoop2 将hdfs中的数据导出到MySQL
1.进入sqoop2终端: [root@master /]# sqoop2 2.为客户端配置服务器: sqoop:000> set server --host master --port 120 ...
- intellij tomcat配置
目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...
- 【计算机视觉】OpenCV篇(9) - 轮廓(寻找/绘制轮廓)
什么是轮廓? 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 轮廓与边缘好像挺像的? 是的,确实挺像,那么区别是什么呢?简而言之,轮廓是连续的,而边缘并不全都连续(见下图示例).其实边缘主要是 ...
- 安装 KVM
安装 KVM 需要的包 sudo apt-get install -y qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan ...