反向代理(Reverse Proxy)是指代理服务器接收客户端请求后,将请求转发到其他服务器去获取资源,然后再把获取到的资源返回给客户端。相当于代理服务器代替真正的服务器提供服务。golang可以通过reverseproxy包来实现反向代理功能。

示例代码如下:

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    targetURL, err := url.Parse("http://example.com")
    if err != nil {
        log.Fatal(err)
    }

    proxy := httputil.NewSingleHostReverseProxy(targetURL)

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        log.Printf("Request from %s for %s", r.RemoteAddr, r.URL.Path)
        proxy.ServeHTTP(w, r)
    })

    log.Printf("Listening on :8080")
    http.ListenAndServe(":8080", nil)
}

首先,通过url.Parse函数将要代理的URL解析出来。然后,创建一个ReverseProxy指向这个URL,并使用HandleFunc函数将HTTP请求路由到代理服务器上。在HTTP处理函数中,使用ServeHTTP函数将请求转发到目标URL,将目标服务器的响应结果返回给客户端。

需要注意的是,在实际使用中,应该根据代理服务器的需求修改proxy对象的属性,例如修改代理Headers、修改代理Timeout设置等等。