Golang: 创建Web服务
使用 Go 语言,我们可以轻松创建出 Web 服务,这一点比 Node.js 还要简单,今天就来总结一下 Go 语言中 Web 服务的创建方式。
首先,我们需要引入 net/http 这个包来处理 HTTP 请求,然后在指定的端口开启服务,下面来写一个最简单的 Web 服务程序:
// server.go
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", handler)
log.Println("go server listening at port 3000...")
err := http.ListenAndServe(":3000", nil)
if err != nil {
log.Fatal("err: ", err)
}
}
func handler(res http.ResponseWriter, req *http.Request) {
log.Println(req.URL.Path)
fmt.Fprintf(res, "URL.Path = %q\n", req.URL.Path)
}
上面代码中,我们会处理所有 3000 端口的请求,然后在页面显示请求的路径。另外,我们在代码中引入了 log 包,使用 log.Println(s) 方法打印信息,运行代码后,在浏览器请求 localhost:3000 及 localhost:3000/test,控制台打印信息如下:
$ go run server.go
2018/08/30 13:26:58 go server listening at port 3000...
2018/08/30 13:27:01 /
2018/08/30 13:27:07 /test
接下来,我们希望这个服务能够解析出浏览器的请求信息,返回并显示到页面,下面是经过改进后的代码:
// server.go
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", handler)
log.Println("go server listening at port 3000...")
err := http.ListenAndServe(":3000", nil)
if err != nil {
log.Fatal("err: ", err)
}
}
func handler(res http.ResponseWriter, req *http.Request) {
// 请求方法 请求地址 协议类型
fmt.Fprintf(res, "%s %s %s\n", req.Method, req.URL, req.Proto)
// 请求头信息
for k, v := range req.Header {
fmt.Fprintf(res, "Header[%q] = %q\n", k, v)
}
// 请求的服务器URL & 请求的远程地址
fmt.Fprintf(res, "Host = %q\n", req.Host)
fmt.Fprintf(res, "RemoteAddr = %q\n", req.RemoteAddr)
if err := req.ParseForm(); err != nil {
log.Print(err)
}
// 表单信息
for k, v := range req.Form {
fmt.Fprintf(res, "Form[%q] = %q\n", k, v)
}
}
在 handler 函数中,我们从 http.Request 中取出相应的 HTTP 请求信息,然后返回给浏览器,大家可以亲自运行以上代码,来观察实际效果。
接下来,我们希望做个小功能 - 统计用户的访问次数,这是一项很古老的技术了,在上个世纪的论坛网站中曾广泛应用。
Golang: 创建Web服务的更多相关文章
- Webservices-2.C#创建web服务,及引用访问、代码访问
注:web服务简介Webservices-1.web服务定义简介 以下均以C#语言为例 一.创建web服务(简单介绍,主要讨论客户端引用) 打开VS创建网站项目,在网站项目中添加“WEB服务(ASMX ...
- http-server让你在任何目录下都可以创建web服务
在做前端页面开发,或者预览时,如果借助于Apache.Tomcat.nginx等预览页面,每次需要将所需预览的页面移动到对应的文件夹下,且还需要考虑是否删除相关目录原有的文件,显然比较麻烦. 那么有没 ...
- 手把手教你在.NET中创建Web服务
最近发现在.NET平台下使用Web服务还是很简单的.下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如 ...
- 基于Socket创建Web服务
基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图
- Web Service 实例基于Socket创建Web服务
ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp so ...
- ASP.NET---如何使用web api创建web服务
1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ...
- 使用BPEL创建Web服务组合
http://www.cnblogs.com/ahhuiyang/archive/2012/12/18/2824131.html 为简单起见,本例的Web服务组合只调用一个Web Service AP ...
- 使用Golang搭建web服务
如何用golang搭建一个web服务呢?菜鸟官网的go web编程教程已经介绍了web服务器的工作原理,这里就不赘述了. 我们先看个例子:http.go package main import ( & ...
- asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)
第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asy ...
随机推荐
- IDEA中各种图标
前言 在用这个开发工具之前对大量的图标先有所了解,会提高不少效率 首先讲下基本的图标 Java类 Java抽象类 Groovy类 注解类 枚举类 异常类 最终的类 接口 包含有main方法的可 ...
- async和await对promise异步方案的改进,以及使用注意事项
async.await相比原生promise的有优势: 1.更加简洁,await一个promise即可,那么会自动返回这个promise的resolve值,无需在then函数的回调中手动取值,彻底解决 ...
- Windows快速批量删除大量文件的命令
命令分别如下: rmdir [drive:]path [/S] [/Q] del [drive:]path [/S] [/Q] 其中rmdir 与rd命令相同. /S 表示除目录本身外,还将删除指定目 ...
- kafka原理篇
目录 消息队列分类 点对点 发布/订阅 kafka介绍 kafka架构说明 Topic与Partition的关系 partition复制机制 Consumer与Topic的关系 消息队列分类 点对点 ...
- [转帖]Hikari 数据源介绍
Hikari 数据源介绍 jimmy・2018 年 09 月 23 日・默认分类 预估 https://izhong.me/index.php/archives/78/ 介绍 官网地址: https: ...
- [转帖]/var/log/wtmp文件的作用
/var/log/wtmp文件的作用 https://blog.51cto.com/oldyunwei/1658778 /var/log/wtmp是一个二进制文件,记录每个用户的登录次数和持续时间 ...
- Java学习:常量和变量 的定义和注意事项
常量:在程序运行期间,固定不变的量. 常量的分类:1.字符串常量:凡是用双引号引起来的部分,叫做字符串常量. 例如:"abc","Hello","12 ...
- jmeter(二十七)分布式压测注意事项
之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...
- mvc_第一遍_业务逻辑层和模型
常用的动态网页对象: 之前我们提到了,使用request对象可以获得和用户请求相关的一系列信息.这一节,我们来看看另外两个常用对象的常规用途. response对象:用于向客户回应.最常用的用法类似于 ...
- Unity AsyncGPUReadback 接口测试
Unity2018新加入了该接口,可以做到异步RenderTexture->像素数据和异步的ComputeBuffer.GetData 那么写了几个例子来测试下. 1.RenderTexture ...