返回顶部
首页 > 资讯 > 精选 >如何使用Go语言写一个Http Server
  • 703
分享到

如何使用Go语言写一个Http Server

2023-06-30 10:06:55 703人浏览 安东尼
摘要

这篇文章主要介绍了如何使用Go语言写一个Http Server的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Go语言写一个Http Server文章都会有所收获,下面我们一起来看看吧

这篇文章主要介绍了如何使用Go语言写一个Http Server的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Go语言写一个Http Server文章都会有所收获,下面我们一起来看看吧。

Http Server 代码

go.mod:

module goStudy1go 1.17

main.go:

package mainimport ("fmt""os""strconv"//"GitHub.com/thinkeridea/go-extend/exnet""io""log""net/http""strings")// Main方法入口func main() {println("环境正常")// 功能1http.HandleFunc("/requestAndResponse", requestAndResponse)// 功能2http.HandleFunc("/getVersion", getVersion)// 功能3http.HandleFunc("/ipAndStatus", ipAndStatus) //注册接口句柄// 功能4http.HandleFunc("/healthz", healthz) //注册接口句柄err := http.ListenAndServe(":81", nil) //监听空句柄,80端口被占用,使用81端口if nil != err {log.Fatal(err) //显示错误日志}}// 功能1,接收请求及响应func requestAndResponse(response http.ResponseWriter, request *http.Request) {println("调用requestAndResponse接口")headers := request.Header //header是Map类型的数据println("传入的hander:")for header := range headers { //value是[]string//println("header的key:" + header)values := headers[header]for index, _ := range values {values[index] = strings.TrimSpace(values[index])//println("index=" + strconv.Itoa(index))//println("header的value:" + values[index])}//valueString := strings.Join(values, "")//println("header的value:" + valueString)println(header + "=" + strings.Join(values, ","))        //打印request的header的k=vresponse.Header().Set(header, strings.Join(values, ",")) // 遍历写入response的Header//println()}fmt.Fprintln(response, "Header全部数据:", headers)io.WriteString(response, "succeed")}// 功能2,获取环境变量的versionfunc getVersion(response http.ResponseWriter, request *http.Request) {println("调用getVersion接口")envStr := os.Getenv("VERSION")//envStr := os.Getenv("hadoop_HOME")//println("系统环境变量:" + envStr) //可以看到 C:\soft\hadoop-3.3.1Win10需要重启电脑才能生效response.Header().Set("VERSION", envStr)io.WriteString(response, "succeed")}// 功能3,输出IP与返回码func ipAndStatus(response http.ResponseWriter, request *http.Request) {println("调用ipAndStatus接口")fORM := request.RemoteAddrprintln("Client->ip:port=" + form) //虚拟机是桥接模式。使用postman返回的全部是127.0.0.1用手机打开网站192.168.1.139:81/ipAndStatus可以看到新IPipStr := strings.Split(form, ":")println("Client->ip=" + ipStr[0]) //打印ip// 获取http响应码//response.WriteHeader(301) //手动设置响应码,默认200//response.WriteHeader(http.StatusOK)//由于默认是调用这个,∴返回码都是这个200【server.go有源码】println("Client->response code=" + strconv.Itoa(http.StatusOK))//println("response code->:" + code)io.WriteString(response, "succeed")}// 功能4,连通性测试接口func healthz(response http.ResponseWriter, request *http.Request) {println("调用healthz接口")response.WriteHeader(200) //设置返回码200//response.WriteHeader(http.StatusOK)//默认会调用这个方法,默认就是200【server.go有源码】io.WriteString(response, "succeed")}

由于80端口被占用,使用了81端口。

调试

由于linux虚拟机没有安装go环境,只有windows有go环境,使用goland开发后,用postman调试。

功能1

如何使用Go语言写一个Http Server

POST的request中额外配置了 k2=v1 。Send后可以看到:

如何使用Go语言写一个Http Server

Response中出现了手动新增的请求头及其它默认的请求头。【原始的response只有3对kv结果,已经遍历添加成功】。说明成功写入。

功能2

由于Windows需要重启才能刷新环境变量,故:

//envStr := os.Getenv("VERSION")envStr := os.Getenv("HADOOP_HOME")

测试时,此处读取已经存在的环境变量,原理是一致的。

网站:http://127.0.0.1:81/getVersion

如何使用Go语言写一个Http Server

说明Go可以读取到环境变量的值,并且写入response的headers。

功能3

网站:http://127.0.0.1:81/ipAndStatus

分别用postman、手机请求这个网站【手机请求时需要和PC在同一个路由,将网站IP更换为PC的IP才可以访问】,goland中显示:

环境正常调用getVersion接口调用ipAndStatus接口Client->ip:port=127.0.0.1:59595Client->ip=127.0.0.1Client->response code=200      调用ipAndStatus接口Client->ip:port=192.168.1.138:37548Client->ip=192.168.1.138Client->response code=200

显然读取到了client的IP。由于server.go中有写:

// WriteHeader sends an HTTP response header with the provided// status code.//// If WriteHeader is not called explicitly, the first call to Write// will trigger an implicit WriteHeader(http.StatusOK).// Thus explicit calls to WriteHeader are mainly used to// send error codes.//// The provided code must be a valid HTTP 1xx-5xx status code.// Only one header may be written. Go does not currently// support sending user-defined 1xx informational headers,// with the exception of 100-continue response header that the// Server sends automatically when the Request.Body is read.WriteHeader(statusCode int)

默认的响应头就是取返回值为200,不设置就是按照默认的200来返回,故此处的响应码为200。

由于响应体引用的请求体并不包含返回码,如果直接从响应体的请求中拿返回码【request.Response.StatusCode】,会报内存错误及空指针的panic。

功能4

网址:http://127.0.0.1:81/healthz

使用postman调用接口,可以看到:

如何使用Go语言写一个Http Server

默认的响应体的响应头的返回码就是200。且返回值3个。

可以看出,Go相比Java还是很简洁的。

关于“如何使用Go语言写一个Http Server”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何使用Go语言写一个Http Server”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何使用Go语言写一个Http Server

本文链接: https://lsjlt.com/news/328146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用Go语言写一个Http Server
    这篇文章主要介绍了如何使用Go语言写一个Http Server的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Go语言写一个Http Server文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
  • 使用Go语言写一个Http Server的实现
    目录调试功能1功能2功能3功能4Http Server 代码 go.mod: module goStudy1 go 1.17 main.go: package main imp...
    99+
    2024-04-02
  • Go语言实现一个Http Server框架(一) http库的使用
    目录http库的使用Body和GetBodyURLRequest.URL.QueryRequest.URLHeaderMethodFormhttp库的使用 要实现一个httpServ...
    99+
    2023-05-18
    Go语言实现Http Server框架 Go语言 Http Server框架 Go语言 http库
  • 如何使用go语言书写一个区块链
    如何使用go语言书写一个区块链?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。操作环境:windows10系统、GO 1.11.2、thinkpad t480电脑。在区块链公...
    99+
    2023-06-06
  • 如何在Django中使用Go语言编写HTTP API?
    Django是一个非常流行的Python Web框架,它有着强大的开发工具和丰富的生态系统。但是,有时候我们需要使用其他语言来实现一些特定的功能,例如Go语言的高性能和并发处理能力。在这篇文章中,我们将会介绍如何在Django中使用Go语言...
    99+
    2023-07-23
    django api http
  • Go语言Http Server框架实现一个简单的httpServer
    目录实现一个简单地httpServer首先我们来写一个接口基于http库实现一个结构体实现Server接口实现一个简单地httpServer 上一篇文章对http库的基本使用做了说明...
    99+
    2023-05-18
    Go Http Server框架 Go HttpServer
  • 如何使用 Go 语言处理 HTTP 对象?
    Go 语言是一门快速、简单、高效的编程语言,它在处理 HTTP 对象方面非常出色。在本文中,我们将深入探讨如何使用 Go 语言处理 HTTP 对象,让你能够更好地掌握 Go 语言的网络编程能力。 一、HTTP 对象概述 在开始讲解如何使用 ...
    99+
    2023-07-03
    大数据 http 对象
  • 如何使用go语言编写http服务器并与git集成?
    Go语言是一种现代化的编程语言,它的出现为Web应用程序的开发带来了很多便利。在本文中,我们将介绍如何使用Go语言编写一个HTTP服务器,并将其与Git集成起来。 Go语言HTTP服务器的基础 在开始编写HTTP服务器之前,我们需要了...
    99+
    2023-08-25
    http git shell
  • Go 语言中的 HTTP 模块:如何使用 NPM?
    在现代的 Web 应用程序开发中,HTTP 协议是不可或缺的一部分,因为它是浏览器和服务器之间进行通信的标准协议。 Go 语言在其标准库中包含了一个用于处理 HTTP 请求和响应的模块,使得在 Go 语言中开发 Web 应用程序非常方便。...
    99+
    2023-09-08
    http npm linux
  • 如何用C语言写一个散列表
    本篇文章为大家展示了如何用C语言写一个散列表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、快速理解散列表散列表,就是下标可以为字母的数组。假设现有一个数组int a[100],想查找其中第40个...
    99+
    2023-06-22
  • 如何使用Go语言编写实时API?
    Go语言是一种高效、简洁、高并发的编程语言,非常适合用于开发实时API。在本篇文章中,我们将会介绍如何使用Go语言编写实时API,并通过演示代码来展示具体实现方法。 理解实时API 实时API是指在请求发出后,服务端能够立即返回实时结果...
    99+
    2023-09-12
    数组 api 实时
  • 你会用Go语言编写HTTP请求吗?
    当今互联网时代,HTTP协议已经成为了互联网通讯的标准,而Go语言作为一门高效、简洁的编程语言,其在HTTP请求方面表现也十分出色。在本篇文章中,我们将一起探讨如何使用Go语言编写HTTP请求。 一、HTTP请求的基础知识 在学习HTTP请...
    99+
    2023-11-14
    http leetcode 数组
  • 如何用Go语言生成一个排列
    如何用Go语言生成一个排列,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。算法目前,生成一个序列的...
    99+
    2024-04-02
  • 如何使用 Go 创建一个高效的 HTTP API?
    Go 是一种高效的编程语言,它的高并发性能和简单易学的语法使其成为构建 HTTP API 的首选语言之一。在这篇文章中,我们将介绍如何使用 Go 创建一个高效的 HTTP API,并给出一些示例代码。 创建一个简单的 HTTP API ...
    99+
    2023-07-23
    http api leetcode
  • C语言如何编写一个链表
    这篇文章主要介绍了C语言如何编写一个链表,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了C语言编写一个链表的具体代码,具体内容如下链表具备的基本功能:1.创...
    99+
    2023-06-15
  • 如何使用Go语言打包和加载HTTP模块?
    Go语言是一种简单、高效的编程语言,它被广泛应用于各种领域,特别是在Web开发中。HTTP模块是开发Web应用程序中必不可少的一部分,Go语言提供了许多方便的工具来打包和加载HTTP模块。在本文中,我们将介绍如何使用Go语言打包和加载HTT...
    99+
    2023-10-18
    http 打包 load
  • Go语言如何使用标准库发起HTTP请求
    本篇内容介绍了“Go语言如何使用标准库发起HTTP请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HTTP请求的基本结构在发起HTTP请求...
    99+
    2023-07-05
  • 详解Go语言如何进行Http调用
    目录前言前置知识GET 请求小结前言 无论是微服务还是单体架构等,服务间都有相互通信的时候,而最直接的通信方法就是 HTTP 调用,本文将会介绍在 Go 语言里,如何进行 HTTP ...
    99+
    2022-12-15
    Go语言Http调用 Go Http调用
  • 如何编写Go语言库
    这篇文章主要讲解了“如何编写Go语言库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写Go语言库”吧!不要对 HTTP 客户端硬编码很对库都包含了对 http.DefaultClien...
    99+
    2023-06-16
  • 如何使用Go语言编写高效的算法?
    Go语言是一种高效、可靠、简单、快速的编程语言,它被广泛应用于各种领域,包括算法开发。在本文中,我们将探讨如何使用Go语言编写高效的算法。 选择合适的数据结构 在编写高效的算法时,选择合适的数据结构非常重要。Go语言提供了多种数据结构...
    99+
    2023-09-11
    编程算法 laravel 响应
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作