Gin框架入门03--处理简单参数和表格
  [draft]

package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" ) func main() { fmt.Printf("launch") r := gin.Default() r.GET("/user/:name/*action", GetParamPath) r.GET("/welcome",GetQueryParmeters) r.POST("/form_post",Formpost) r.Run(":9000") } func GetParamPath(c *gin.Context) { name := c.Param("name") action := c.Param("action") message := name + " is " + action c.String(http.StatusOK, message) } func GetQueryParmeters(c *gin.Context) { firstname := c.DefaultQuery("firstname", "Guest") lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname") c.String(http.StatusOK, "Hello %s %s", firstname, lastname) } func Formpost(c *gin.Context) { message := c....

August 23, 2018

Gin框架入门02--HTTP常用请求方法示例
  [draft]

HTTP HTTP协议最常用的方法是Get方法和Post方法,任何一个了解过Web开发的程序员,都耳熟能详,那么还有哪些方法是HTTP协议支持的呢? GET 请求获取Request-URI所标识的资源 POST 在Request-URI所标识的资源后附加新的数据 HEAD 请求获取由Request-URI所标识的资源的响应消息报头 PUT 请求服务器存储一个资源,并用Request-URI作为其标识 DELETE 请求服务器删除Request-URI所标识的资源 OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求 RESTful 架构中使用了四种HTTP方法作为对资源(URI)的操作 方法名称 含义 GET 获取资源 POST 新建资源(也可以用于更新资源) PUT 更新资源 DELETE 用来删除资源 使用Gin框架实现响应常见HTTP方法的示例 package main import ( "github.com/gin-gonic/gin" "net/http" "io/ioutil" "fmt" ) func main() { r := gin....

August 22, 2018

Gin框架入门01--Http请求Body和Header的获取
  [draft]

前言 Gin是一个轻量级的Web开发框架,与重量级代表Beego的区别在于,Gin专注于Web 中Http协议处理,数据、表格解析,路由与中间件等,而Beego相对大而全,完整MVC模式,不仅包含了Web协议处理的内容,也包含了数据库的CURD(Beego光数据库的驱动都有三种 mysql/Sqlite/Postgres) 首先对于Gin框架的安装 简要 > go get -u github.com/gin-gonic/gin > Gin官方Demo Gin教程的官方入门程序 example.go 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 } 运行 example.go,可以通过浏览器来访问 http://localhost:8080/ping 如果一切运行正常,那么可以看到浏览器中有Json返回 Gin获取Http请求头Header和Body  一个HTTP报文由3部分组成,分别是:  (1)、起始行(start line)  (2)、首部(header)  (3)、主体(body) 本次主要关注的是发起请求的报文,使用Postman做为测试工具,发起Http请求 package main import ( "fmt" "github.com/gin-gonic/gin" "io/ioutil" ) func main() { fmt.Printf("launch Gin") r := gin....

August 21, 2018

轻量级数据库Sqlite3基础使用
  [draft]

#前言 本文代码主要参考 RabbitMQ官方demo RabbitMQ Tutorials 其中发送消息使用 python,接收消息使用go 基本条件: | 类型| 名称 | 内容 | |:—: |:—-:|:— : | |Operate System|Ubuntu | 16.04| |Message Queue|RabbitMQ| 3.6.15| |MQ Host| http address|192.168.105.132| |MQ User| admin| 123456| ##发送消息 使用 pyhon RabbitMQ库为pika 首先使用 python pip工具安装pika pip intsall pika 显示已经安装软件 pip list 完整源码sendmq.py import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") connection.close() ##接收消息 笔者go运行环境在window 系统中 使用go RabbitMQku 为 Go amqp client 运行go安装...

March 6, 2018

linode 服务器延迟测试powershell脚本
  [draft]

有个需求需要测试一下linode不同节点的服务器延迟大小,如果每次手工输命令测试,那效率太低。因此做一个简单的脚本 来测试不同节点的网络延迟 linode speed test 完整代码如下 ping speedtest.newark.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.atlanta.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.dallas.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.fremont.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.frankfurt.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.london.linode.com -n 10 |Out-File "C:\linode.txt" ping speedtest.singapore.linode.com -n 10 |Out-File "C:\linode.txt" 主要功能是 ping 一个主机看 返回延时数据,同时把数据保存到txt文本 某次测试结果如下: 正在 Ping speedtest.frankfurt.linode.com [139.162.130.8] 具有 32 字节的数据: 来自 139.162.130.8 的回复: 字节=32 时间=300ms TTL=52 来自 139.162.130.8 的回复: 字节=32 时间=301ms TTL=52 来自 139....

March 1, 2018

QT制作TCPserver完成十六进制数据收发
  [draft]

主体需求是: 开发一个TCPserver 定时发送固定的十六进制字符串 首先界面的

February 5, 2018

轻量级数据库Sqlite3基础使用
  [draft]

使用SQLite3本地数据库,运行一个demo,记录一下配置与运行结果。SQLite数据库广泛用于嵌入式系 统、桌面软件等作为本地数据库 本文有参考网络Blog完成 #准备工作 1、新建工程,内容如下 2、配置库目录 lib目录 #源码 #include <iostream>#include "sqlite3.h" #define _DEBUG_ 1P using namespace std; int main(int argc, char* argv[]) { sqlite3 *db = NULL; char *zErrMsg = 0; int rc; rc = sqlite3_open("mydemo.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 if (rc) { cout << stderr << "Can't open database: " << sqlite3_errmsg(db) << endl; sqlite3_close(db); return (1); } else cout<<"create or open Sqlite3 sucess" <<endl; //创建表 TABLE ,字段有:ID,SensorID ,SiteNum ,Time, SensorParameter char *sql = " CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);"; sqlite3_exec(db, sql, 0, 0, &zErrMsg); //插入数据 sql = "INSERT INTO SensorData VALUES(NULL , 4 , 1 , '201602011203', 18....

November 20, 2016