使用 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服务的更多相关文章

  1. Webservices-2.C#创建web服务,及引用访问、代码访问

    注:web服务简介Webservices-1.web服务定义简介 以下均以C#语言为例 一.创建web服务(简单介绍,主要讨论客户端引用) 打开VS创建网站项目,在网站项目中添加“WEB服务(ASMX ...

  2. http-server让你在任何目录下都可以创建web服务

    在做前端页面开发,或者预览时,如果借助于Apache.Tomcat.nginx等预览页面,每次需要将所需预览的页面移动到对应的文件夹下,且还需要考虑是否删除相关目录原有的文件,显然比较麻烦. 那么有没 ...

  3. 手把手教你在.NET中创建Web服务

    最近发现在.NET平台下使用Web服务还是很简单的.下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如 ...

  4. 基于Socket创建Web服务

    基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图

  5. Web Service 实例基于Socket创建Web服务

    ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp so ...

  6. ASP.NET---如何使用web api创建web服务

    1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ...

  7. 使用BPEL创建Web服务组合

    http://www.cnblogs.com/ahhuiyang/archive/2012/12/18/2824131.html 为简单起见,本例的Web服务组合只调用一个Web Service AP ...

  8. 使用Golang搭建web服务

    如何用golang搭建一个web服务呢?菜鸟官网的go web编程教程已经介绍了web服务器的工作原理,这里就不赘述了. 我们先看个例子:http.go package main import ( & ...

  9. asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)

    第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asy ...

随机推荐

  1. 分布式环境配置虚拟域名,phpstudy配置虚拟域名,集成环境配置域名,域名禁止访问forbidden怎么解决

    重启Apache,测试:  

  2. 【louguP2234】[HNOI2002]营业额统计(链表)

    题目链接 离线用链表维护,先按权值排序,建立链表,记录每一天在链表的位置,然后按天数从大到小查询,查询完删除 #include<algorithm> #include<iostrea ...

  3. ELK原理

    为什么要使用Elasticsearch?​ 因为在我们中的数据,会随着时间变的非常多,若采用以往的模糊查询,模糊查询前置通配符,如:"%aa%",会放弃索引,导致数据表查询将变成全 ...

  4. Intellij 热部署插件 JRebel [转载]

    原文:https://blog.csdn.net/weixin_42831477/article/details/82229436 Intellij热部署插件JRebel IDEA本身没有集成热部署工 ...

  5. shell三剑客之sed

    背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查.为什么称之为"流"编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处 ...

  6. php form表单ajax上传图片方法

    form表单ajax上传图片方法 先引用jquery.form.js 前台代码<pre><form id="form1"> <input id=&qu ...

  7. centos下导出docx为html

    yum -y install libreoffice.x86_64 libreoffice --invisible --convert-to html --outdir /root/demo_html ...

  8. sqlException 使用relace 替换单引号

    我们从前端输入数据的时候,可能会输入一些 单引号 ,的字符 导致直接进行执行sql 语句保存的时候出现错误 如: 输入的有 单引号 保存按钮小代码 <asp:Button ID="bt ...

  9. Springboot Actuator之九:actuator jmx endpoint

    1.配置 endpoints.jmx.domain: myapp endpoints.jmx.uniqueNames: true endpoints.auditevents.enabled: true ...

  10. 【LeetCode】48. Rotate Image

    Difficulty:medium  More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/rotate-image/ ...