Golang Go语言小白求大佬指教

发布于 1周前 作者 wuwangju 来自 Go语言

Golang Go语言小白求大佬指教

现在有一个需求 想拿到用户的请求(如 80 443 端口的 http 请求) 进行过滤 通过的就转发到本地的站点端口 不通过的就直接返回 404 或者重定向到其他的地址

但是不知道该怎么写 求大佬指点一下思路 或者应该了解那些知识点呢 这是我做的思维导图 。。。

16 回复

你这个需求不明确
golang 自带 http server 库,也可以用 gin 等。如果是做个 client 转发,如果不是自定义 404/301 。
问题在哪?

更多关于Golang Go语言小白求大佬指教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你用 go 写过 http 服务吗?

#2 之前做过,但是用 nginx 转发到 golang 这个,我是想让请求都经过 golang 进行处理,然后转发到 nginx 或者其他服务

你提问的就是流程(思路)。如果你还不知道,那应该从基础学一下

需求拆开看,分 3 个部分,http 服务器,http 请求,过滤器,你说的拿到 80 443 端口的请求,其实就是个 http 服务器,拿到参数后走个过滤程序,通过后,uri 和参数不变,向业务服务器发请求,把结果返回给用户

https://medium.com/@mlowicki/http-s-proxy-in-golang-in-less-than-100-lines-of-code-6a51c2f2c38c

参考这个。
你可以在 http.HandlerFunc 对 *http.Request 加个过滤。
不过强烈建议稍微了解下基础概念

另外,直接 golang 处理 https 可能不是一个很好的主意(当然这是可行的),因为这个证书管理可能会遇到点麻烦。你可以用 nginx 或者各种 slb 等代理一层,go 需要过滤处理 http 完事

会也不教你

你这个需求,更像做一个代理服务器,思路很简单,你先用 go 做成功一个代理功能,第一步什么也不要想,别去想什么过滤功能,你只要实现代理就好了,就想左手拿到数据,交给右手这样简单。
实现了第一步代理功能,第二步,就是 go 解析客户端的请求内容,做特征识别过滤,到这里你的需求就完成了。

#9 #9 号🤣🤣,就你说的最直白,哈哈哈对我太友好,我先去了解

没啥难点 大概写下伪代码 题主自己调试下
func main() {
// 配置下反向代理地址
proxyer := httputil.NewSingleHostReverseProxy(…)
// demo 监听一个地址
http.ServeAndListen(":8080", http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request){
// 在此过滤逻辑
if req.Path == “/” {
rw.WriteHeader(404)
return
}
// 反向代理转发
proxyer.ServeHTTP(rw,req)
}))
}

过滤条件复杂就用 go 自带的 http server 处理
不负责 nginx 就行了

既然写过,那这个需求并不比通常的 http 服务更复杂,只不过监听了两个端口,443 端口需要指定证书和 key 的文件路径,不知道你的困难点在哪?是不知道怎么监听两个端口还是不知道怎么做反向代理还是别的?

谢谢大佬,参考您的代码 我已经可以做简单的反带了,接下来我要开始慢慢搞规则了 哈哈哈哈谢谢

你好,作为Golang(Go语言)的初学者,很高兴能为你提供一些入门建议。

首先,Go语言是一门非常简洁且强大的编程语言,特别适合系统编程、网络编程以及并发编程。对于初学者来说,建议从Go语言的官方文档和教程入手,这些资源非常系统且易于理解。

在学习过程中,有几个关键点需要特别注意:

  1. 基础语法:务必掌握Go语言的基础语法,包括变量声明、数据类型、控制结构等。这些基础知识是后续学习的基础。

  2. 并发编程:Go语言在并发编程方面有着出色的表现。因此,了解goroutine、channel等并发原语是非常重要的。

  3. 标准库:Go语言的标准库非常强大,涵盖了网络编程、文件操作、文本处理等多个方面。学会使用标准库可以大大提高编程效率。

  4. 实践项目:理论学习之后,最好通过实践项目来巩固所学知识。你可以尝试编写一些简单的程序,如HTTP服务器、文件处理工具等。

  5. 社区资源:加入Go语言的社区,如GitHub、Stack Overflow等,可以获取更多学习资源和技术支持。

最后,保持耐心和持续学习的态度。编程是一个需要不断实践和积累的过程。相信在不久的将来,你一定能够成为Go语言方面的专家。祝你学习顺利!

回到顶部