如何用 Go 编写一个简单的自定义 HTTP 服务器?

2024-03-12

我是 Go 新手,正在尝试编写一个自定义 HTTP 服务器。我收到编译错误。我该如何实施ServeHTTP我的代码中的方法?

My Code:

package main

import (
    "net/http"
    "fmt"
    "io"
    "time"
)


func myHandler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "hello, world!\n")
}


func main() {
    // Custom http server
    s := &http.Server{
        Addr:           ":8080",
        Handler:        myHandler,
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }

    err := s.ListenAndServe()
    if err != nil {
        fmt.Printf("Server failed: ", err.Error())
    }
}

编译时出错:

.\hello.go:21: cannot use myHandler (type func(http.ResponseWriter, *http.Request)) as type http.Handler in field value:
    func(http.ResponseWriter, *http.Request) does not implement http.Handler (missing ServeHTTP method)

您可以使用结构并定义ServeHTTP在它上面或者简单地将你的函数包装在HandlerFunc http://golang.org/pkg/net/http/#HandlerFunc

s := &http.Server{
    Addr:           ":8080",
    Handler:        http.HandlerFunc(myHandler),
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用 Go 编写一个简单的自定义 HTTP 服务器? 的相关文章

  • 为什么我无法导入“内置”pkg?

    cat test go package main import builtin func main return go run test go can t find import builtin 我只是好奇 因为该文件存在并且已正确打包 但
  • 为什么Go中可以在多个return语句中重新定义err

    考虑下面的示例来说明这个问题 它只是为了解释这个问题而构建的 但我在书中以及实际项目中都看到了类似的代码 package main import strconv fmt log func main n1 err strconv Atoi 1
  • Golang xml.Unmarshal 接口类型

    使用xml我在解组非同质类型列表时遇到问题 考虑以下 XML 文档 其嵌套元素是非同质类型的列表
  • 如何将 interface{} 转换回其原始结构?

    我需要一种方法将结构 接口动态转换回其原始对象 我可以在里面添加方法 函数 基本上我需要这样的东西 MyStruct gt Interface gt MyStruct 在最终转换时 除了结构内部的内容之外 我对原始结构一无所知 所以我不能这
  • 如何让供应商与 Google App Engine 配合使用?

    我正在尝试引入 Go 供应商 将依赖项存储在名为的文件夹中 vendor 到现有的 App Engine 项目 我已将所有依赖项存储在供应商文件夹中 使用 Godep 作为助手 它看起来是正确的 但在本地运行应用程序时出现以下错误 go a
  • 从恐慌中恢复的程序未按预期退出

    根据我的理解 当恐慌恢复时 我期望程序退出并表现出正常行为 但事实并非如此 我期望最后一行打印 程序结束 是正确的吗 如果出现运行时错误 它不会被打印 是吗 package main import fmt func main defer f
  • 重写 ResponseWriter 接口以捕获 HTTP 错误

    我正在用 Go 编写一个 Web 应用程序 虽然各种 mux 库提供了一种设置自定义 404 错误处理程序的方法 但没有任何其他 4xx 和 5xx 错误代码 一个建议是重写 ResponseWriter 接口中的 WriteHeader
  • 按顺序范围循环映射

    我正在寻找一种确定的方法来范围Go map为了 Go 规范 https golang org ref spec For statements陈述如下 映射的迭代顺序未指定 并且不保证从一次迭代到下一次迭代的顺序相同 如果在迭代过程中删除尚未
  • 空或不需要的结构字段

    我有两个结构体 代表将插入到 mongodb 数据库中的模型 一个结构 投资 将另一个结构 集团 作为其字段之一 type Group struct Base Name string json name bson name type Inv
  • 在 Go 中将 float 转换为 int 时如何舍入到最近的 int

    将 float 转换为 int 时 小数点将被丢弃 有什么干净的方法可以将其四舍五入到最接近的整数 x int 3 6 应等于 4 而不是 3 int f 0 5 如果 gt 5 将导致向上舍入
  • go:找到模块但不包含包

    我正在尝试安装 go 的网络包 但收到 不包含包错误 终端截图 我咨询过 go 模块 latest 已找到但不包含包 https stackoverflow com questions 62974985 go module latest f
  • Golang 中的“相互”包导入

    是否可以在 Golang 中执行 相互 包导入之类的操作 举例来说 我有两个包 A 和 B 分别具有 AFunc 和 BFunc BFunc2 函数 package A import B func AFunc do stuff but al
  • 地图中的最大元素数

    GO 中的 Map 最多可以存储多少个元素 如果我需要经常从 Map 访问数据 那么在长时间运行的程序中不断向 Map 添加项目并从中检索项目是一个好主意吗 除了map length类型的最大值之外 map中的元素数量没有理论上的限制 in
  • 如果覆盖率低于一定百分比,则单元测试失败

    我制作了一个执行的 makefilego test cover 是否有可能失败make unit tests如果覆盖范围低于 X 则命令 我该怎么做呢 您可以使用TestMain在你的测试中做到这一点 TestMain 可以充当测试的自定义
  • 将具有联合字段的 C 结构映射到 Go 结构

    我从 Go 中的某些 WinApi 的系统调用中获取结果 我可以轻松地从 C 代码映射简单的结构 但是如何处理如下所示的 C 结构 typedef struct SPC LINK DWORD dwLinkChoice define SPC
  • 为什么我不能执行 fmt.Sprintf("%d.%d.%d.%d", a...)?

    我正在学习 Go 但我一直坚持 Go 之旅 exercise stringer go https tour golang org methods 7 https tour golang org methods 7 这是一些代码 type I
  • 使用 Golang 通道处理 HTTP 请求

    我正在尝试构建一个简单的 Golang Appengine 应用程序 它使用通道来处理每个 http 请求 原因是我希望每个请求执行合理的大型内存计算 并且每个请求都以线程安全的方式执行 即来自并发请求的计算不会混合 这一点很重要 本质上
  • 将绝对路径和相对路径组合起来得到新的绝对路径

    我正在编写一个程序 其中一个组件必须能够采用给定的路径 例如 help index html or help 和基于该位置的相对路径 例如 otherpage index html or sub dir of help or help2 h
  • 如何通过模板中的变量访问对象字段?

    我有一个嵌套循环 columns columns range dx dataList range c columns index dx c end end dataList是orm模型数组 和ID Title字段 那么columns is
  • 使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

    我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序 我的 RPC 服务应获取包含类型的消息google protobuf Timestamp 解析它并最终将其保存在数据库中或对其执行更多操作 我对什么被认为是该类型的有

随机推荐

  • Xampp 无法在 Mac OSX 上启动 MySQL 服务器?

    我使用的是 Mac OSX Mountain Lion Xampp 不允许我启动 MySQL 服务器 我已将 XAMPP 文件夹中的每个人和每个文件的权限设置为读 写 错误消息显示 操作无法完成 XAMPPErrorDomain 错误 1
  • CALayer 上的 hitTest - 如何找到哪个实际层被击中?

    情况 需要找到用户触摸了哪一层 问题 Apple 表示我们应该使用 CALayerpresentationLayer 进行命中测试 以便它代表当时屏幕上实际显示的内容 它捕获动画中间的信息等 除了 presentationLayer 不返回
  • Adobe AIR HTML 组件 - socket.io

    我正在尝试在 HTML 组件中加载一个网站 该组件使用 socket io 来获取一些流信息 它在 AIR 之外运行得很好 但在 HTML 组件内时 流式传输无法运行 它是从自身以外的域进行流式传输 我无法控制这两个站点 关于如何让流在 H
  • JavaScript 中是否有内置函数或插件来处理日期格式?

    目前我需要以 2012 年 10 月 5 日 类型格式输出日期 表示月份中的某一天 不带前导零 空格 完整月份名称 逗号 空格 四位数年份 我需要在 JavaScript 中执行此操作 我已经完成了这项工作 但在编写冗长的代码时 我突然想到
  • 使用 Microsoft AntiVirus API 进行文件上传扫描

    这里有人使用过 Microsoft Anti Virus API 来使用任何防病毒软件扫描文件上传吗 你的经验是什么 我想使用 mcafee trend 或其他众所周知的 AV 进行编程调用 Microsoft AntiVirus API
  • 编写 if 语句的更短、更 Pythonic 的方式

    我有这个 bc off if c page blog bc on print bc 有没有更Pythonic 和 或更短 的方式用Python编写这个 最短的应该是 bc on if c page blog else off 一般来说 这可
  • 与 Google Cloud 存储桶相比,指标浏览器中可以看到额外的存储桶

    与云存储存储桶探索相比 度量资源管理器中提供的额外存储桶信息很少 这似乎是旧的删除存储桶 但是 它出现在公制资源管理器中 它出现在这里有什么原因吗 此外 还有一些存储桶在存储资源管理器中可见 但在指标资源管理器中未显示 请注意 这不是在 2
  • 使用Java的ReferenceQueue

    Do SoftReference and WeakReference真的只有在创建为实例变量时才有帮助吗 在方法范围内使用它们有什么好处吗 另一个重要部分是ReferenceQueue 除了能够跟踪哪些引用被确定为垃圾之外 还可以Refer
  • C++11 如何代理只有名称和父类的类函数?

    我想知道是否可以使用 boost mpl preprocessor 或一些 noce C 11 功能从类类型和函数名称创建函数代理 假设我们有 inline void set email const std string value inl
  • Visual Studio 2012 项目始终过时(.cs 已修改)

    我们有一个项目在我们的解决方案中几乎所有其他项目中都使用 并且有一段时间整个解决方案总是重建 因为这个项目中的源文件似乎被修改了 1 gt 项目 实用程序 不是最新的 输入文件 utilities logging result cs 在输出
  • 按因子列估算 data.frame 组中的变量

    我有一个包含数字列的 data frame 这些列具有因子级别 我想通过这些因子级别来估算缺失值 让我解释一下 part id value a 1 23 4 a 2 23 8 a 3 45 6 a 4 34 7 a 5 Na b 1 45
  • Microsoft Media Foundation 中的 h264 无损模式

    我发现h264编解码器可以工作在无损压缩模式下 但微软媒体基金会支持吗 如果是这样 我如何将该编解码器的压缩模式从有损压缩模式切换到无损压缩模式 Windows 附带的 H 264 编码器的软件实现仅限于 H 264 配置文件 并且不提供无
  • GraphQL - 在查询多个突变期间如何检索先前突变的 id

    我想在同一个查询中运行多个突变 在下面的示例中 我创建了一个订单 并在创建了关于之前创建的产品记录之后 我一定有两个突变 首先 我插入订单 在输出中 我检索了 idorder 然后 我插入一个产品 这个产品 mutation createO
  • 开发RESTful应用程序时如何使用Yii2调试器?

    就像在指南中一样 我创建了 RESTful 控制器 UserController namespace app controllers use yii rest ActiveController class UserController ex
  • C# - 文件路径的正则表达式C:\测试\测试.exe

    我目前正在寻找一个可以帮助验证文件路径的正则表达式 例如 C test test2 test exe 我决定发布这个确实使用正则表达式的答案 a zA Z w w w w w 适用于这些 test test TEST xls server
  • Loopj 的 AsyncHttpclient 未设置正确的超时

    我尝试在我的单例类中设置 asynchttpclient 的超时 但似乎它没有改变 我得到了 10000 我认为这是默认值 client setMaxRetriesAndTimeout 0 5000 Log i loopj client g
  • Arch Linux 中没有 OpenGL 3 标头

    我正在尝试使用 FreeGLUT 编译一个非常简单的 Hello world OpenGL 3 3 程序 在我找到的所有教程中 它们都包含标题 gl3 h 问题是我没有这样的头文件 ls l usr include GL total 216
  • 错误:WSDL - SOAP-错误:正在解析 WSDL:无法从 [重复] 加载

    这个问题在这里已经有答案了 我有一个使用soap的php代码 我收到错误 错误 WSDL SOAP 错误 正在解析 WSDL 无法从以下位置加载 这是一个安全 wsdl 所以我还需要发送用户名和密码 我的代码有什么问题吗 我在网上看到它 但
  • Python ctypes 使用 winmode 加载 DLL

    我安装了一个 C API 应用程序 其中包含几个 DLL A DLL and B DLL 在我的程序文件夹中 A DLL依赖于B DLL 我可以成功加载它们ctypes WinDLLIF 从安装文件夹中 例如C Programs Files
  • 如何用 Go 编写一个简单的自定义 HTTP 服务器?

    我是 Go 新手 正在尝试编写一个自定义 HTTP 服务器 我收到编译错误 我该如何实施ServeHTTP我的代码中的方法 My Code package main import net http fmt io time func myHa