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编程实例的更多相关文章

  1. c#摄像头编程实例 (转)

    c#摄像头编程实例 摄像头编程 安装摄像头后,一般可以找到一个avicap32.dll文件 这是一个关于设想头的类 using  system;using  System.Runtime.Intero ...

  2. JAX-RS 2.0 REST客户端编程实例

    JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...

  3. 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别

      请求转发:MVC设计模式.细节.请求域属性的编程实例.请求重定向和请求转发的区别 MVC设计模式将一次请求的响应过程分成三个功能模块(一般称之为层)来协同完成,这三个模块分别是Model(模型层) ...

  4. shell及编程实例

    1.shell简介 1) 概念--命令解释器 2) 常见shell bash linux标准shell sh 早期shell,较简单 csh ksh tcsh unix  shell vi  /etc ...

  5. C++ Web 编程

    C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NCSA 维护的,NCSA 定义 CG ...

  6. devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务

    使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...

  7. C++ Web 编程(菜鸟教程)

    C++ Web 编程(菜鸟教程) C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NC ...

  8. PHP求职宝典系列——PHP Web 编程篇

    PHP Web 编程篇 form表单 1.简述 POST 和 GET 传输的最大容量分别是多少? GET 方法提交的表单数据被附加到 URL 上,并作为URL 的一部分发送到服务器端. URL 的长度 ...

  9. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

随机推荐

  1. phpMyAdmin 安装教程全攻略

    管理MYSQL数据库的最好工具是PHPmyAdmin,现在最新版本是phpMyAdmin 2.9.0.2,这是一个国际上开源的软件,一直在更新版本,你可以从 http://www.phpmyadmin ...

  2. 使用json web token

    由来 做了这么长时间的web开发,从JAVA EE中的jsf,spring,hibernate框架,到spring web MVC,到用php框架thinkPHP,到现在的nodejs,我自己的看法是 ...

  3. Java版本翻转字符串

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1282题目描述: Java中的StringBuilder有一个字符串翻转函数,因此,可以先将输入的数字转 ...

  4. 解决java编译错误:编码GBK的不可映射字符

    新建java文件,存储时Encoding选择了UTF-8, 由于语句中包含中文,javac编译时报错,提示"编码GBK的不可映射字符": 解决办法: 1.使用javac -enco ...

  5. Running Median POJ - 3784 (对顶堆/优先队列 | 链表)

    For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After ...

  6. Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 本文导图: 一.由一个提问引发的思考 在Stack Overflow 看到这样一个问题 ...

  7. 【Excel】将IP按照IP地址(v4)增长序列排序

    Background: Excel列中,有多个net-block, 将这些net-block按照IP地址(v4)自己的大小从小到大排序. Idea: IPv4地址的格式是点分十进制的,也就是说每一个点 ...

  8. 在UnrealEngine中用Custom节点实现高斯模糊

    3x3高斯模糊 //input sW 分辨率宽 //input sH 分辨率高 //input NotUse 为了开启SceneTextureLookup函数而连接的节点,但是不参与逻辑 //inpu ...

  9. IDEA中maven模块变成灰色

    可能该模块被忽略,解决办法:

  10. Debian stretch更换国内源

    在debian图形化安装过程中就可以选择网络镜像的位置 据说电信用清华的源快,移动的用网易源快 备份源配置文件: cp /etc/apt/sources.list /etc/apt/sources.l ...