Go web编程实例
1. go web编程入门
记录个web编程例子方便以后使用。
主要有:
- chan的使用(带缓存,不带缓存)
- client发起get/post请求
- server解析get/post请求参数
- http.HandleFunc 根据请求uri设置对应处理func
2. server.go, 参数解析返回
package main
import (
"fmt"
"io"
"net/http"
"os"
"os/signal"
"strings"
)
func getHandler(w http.ResponseWriter, req *http.Request) {
vars := req.URL.Query() //解析参数
for _, v := range vars { //遍历每个参数
res := fmt.Sprintf("%v", v)
io.WriteString(w, "par val:"+res+"\n")
}
}
func postHandler(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数,默认是不会解析的
fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
fmt.Println("path", r.URL.Path)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "postHandler") //这个写入到w的是输出到客户端的
}
func main() {
//channel 用于优雅退出
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, os.Kill)
//定义2个处理函数
http.HandleFunc("/get", getHandler)
http.HandleFunc("/test", postHandler)
//服务启动
http.ListenAndServe(":12365", nil)
//阻塞等待信号
s := <-c
fmt.Println("退出信号", s)
}
3. client.go, 发起http get/post请求
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func exec_http_get(res chan string) {
resp, err := http.Get("http://127.0.0.1:12365/get?url_long=long&id=12")
if err != nil {
//err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
//err
}
res <- string(body)
}
func exec_http_post(res chan string) {
resp, err := http.PostForm("http://127.0.0.1:12365/test",
url.Values{"key": {"Value"}, "id": {"123"}})
if err != nil {
//request err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
res <- string(body)
}
func main() {
c := make(chan string, 2)
//发送get/post请求
go exec_http_get(c)
go exec_http_post(c)
//查看结果
for i := 0; i < 2; i=i+1{
res := <-c
fmt.Printf("结果: %v\n", res)
}
}
4. 参考
Go web编程实例的更多相关文章
- c#摄像头编程实例 (转)
c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using system;using System.Runtime.Intero ...
- JAX-RS 2.0 REST客户端编程实例
JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...
- 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别
请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...
- shell及编程实例
1.shell简介 1) 概念--命令解释器 2) 常见shell bash linux标准shell sh 早期shell,较简单 csh ksh tcsh unix shell vi /etc ...
- C++ Web 编程
C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NCSA 维护的,NCSA 定义 CG ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
- C++ Web 编程(菜鸟教程)
C++ Web 编程(菜鸟教程) C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NC ...
- PHP求职宝典系列——PHP Web 编程篇
PHP Web 编程篇 form表单 1.简述 POST 和 GET 传输的最大容量分别是多少? GET 方法提交的表单数据被附加到 URL 上,并作为URL 的一部分发送到服务器端. URL 的长度 ...
- Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”
Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...
随机推荐
- HDU2853 Assignment KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284105.html 题目传送门 - HDU2853 题意概括 (来自谷歌翻译) 题解 这是一道好题. 我们首先 ...
- Unknown lifecycle phase "mvn"
Unknown lifecycle phase "mvn" maven执行命令错误 : 执行输入命令即可,不需要添加 mvn 此处不需要写mvn,而是执行写compile就行,否 ...
- 041 SparkSql的回顾与复习
在前面学完了SparkCore后,又学了SparkSQL,在继续加深学习之前,一定的复习还是很重要的.这里大体写一下,加深自己对SparlSQL的理解. 1.SparkSQL 首先是SaprkSQL与 ...
- 关于ACtion类利用file类型取得上传文件的内容,名字和内容类型
上面的Action提供了两个属性:uploadFileName和uploadContentType,这个两个属性分别用于封转上传文件的文件名.上传文件的文件类型.Action类直接通过File类型属性 ...
- OpenCV-Python 中文教程(搬运)目录
OpenCV-Python 中文教程 OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译 说明:搬运自linux公社pdf文件,粗略搬运, ...
- 在web项目中搭建一个spring mvc + spring + mybatis的环境
介绍:本文中示范搭建一个ssm环境的框架:使用流程就是客户端通过http请求访问指定的接口,然后由服务器接受到请求处理完成后将结果返回. 本项目请求流程细节介绍:由客户端请求到指定的接口,这个接口是个 ...
- Is there a TRY CATCH command in Bash
Is there a TRY CATCH command in Bash? No. Bash doesn't have as many luxuries as one can find in many ...
- Xamarin Essentials应用教程文件系统FileSystem
Xamarin Essentials应用教程文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库文件 ...
- AE 模板 素材 视频 科技 公安
3d立体现代城市模型背景视频素材视频素材下载__熊猫办公 1080p 科技高速公路汽车奔驰背景视频视频素材下载__熊猫办公 高科技hud全息元素素材ae视频素材下载__熊猫办公 渲染输出,Adobe ...
- [Web]flask-excel实现excel文件下载的前后端实现
之前同事写了前端表格导出的功能, 前后端逻辑没有梳理, 导致后端代码十分臃肿. 接手之后, 重新选择了前端table插件, 从jqxGrid变更为bootstrapTable. 本来想依赖集成的tab ...