code: func (ctx *Context) ClientIP() string {
  	clientIP := strings.TrimSpace(ctx.requestHeader("X-Real-Ip"))
  	if len(clientIP) > 0 {
  		return clientIP
  	}
  	clientIP = ctx.requestHeader("X-Forwarded-For")
  	if index := strings.IndexByte(clientIP, ','); index >= 0 {
  		clientIP = clientIP[0:index]
  	}
  	clientIP = strings.TrimSpace(clientIP)
  	if len(clientIP) > 0 {
  		return clientIP
  	}
  	if ip, _, err := net.SplitHostPort(strings.TrimSpace(ctx.Request.RemoteAddr)); err == nil {
  		return ip
  	}
  	return ""
  }
docs: // ClientIP implements a best effort algorithm to return the real client IP, it parses
  // X-Real-IP and X-Forwarded-For in order to work properly with reverse-proxies such us: nginx or haproxy.
  // This method is taken from https://github.com/gin-gonic/gin