Resty, es un cliente simple para consultar Apis http. Tiene muchas características :
- Todos los métodos http: GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, etc.
- Métodos simples y encadenables para configuraciones y solicitudes.
- El cuerpo de la solicitud puede ser una cadena, [] byte, estructura, mapa, segmento e io.Reader también detecta automáticamente el tipo de contenido
- Procesamiento sin búfer para io.Reader
- Se puede acceder a la instancia *http.Request nativa durante la ejecución del middleware y la solicitud a través de Request.RawRequest
- El cuerpo de la solicitud se puede leer varias veces a través de Request.RawRequest.GetBody()
- Acceso como matriz de []bytes - respuesta.Cuerpo() O Acceso como cadena - respuesta.Cadena()
- Clasificación y desclasificación automáticas para el tipo de contenido JSON y XML
- El valor predeterminado es JSON, si proporciona estructura/mapa sin encabezado Content-Type
- Compatible con RFC7807: application/problem+json&application/problem+xml
- Resty proporciona una opción para anular JSON Marshal/Unmarshal y XML Marshal/Unmarshal
- Fácil de cargar uno o más archivos a través de multipart/form-data
- Detecta automáticamente el tipo de contenido del archivo
- Solicitud de parámetros de ruta de URL (también conocidos como parámetros de URI)
- Mecanismo de reintento de retroceso con referencia de función de condición de reintento
- Middleware de solicitud y respuesta HTTP y REST del cliente Resty
- Solicitud.SetContext compatible
- Opción de autorización de BasicAuth y Bearer token
- Establecer el valor de ContentLength de solicitud para todas las solicitudes o solicitudes en particular
- Certificados raíz personalizados y certificados de cliente
- Descargue/guarde la respuesta HTTP directamente en el archivo, como el indicador curl -o. Consulte SetOutputDirectory y SetOutput.
- Cookies para su solicitud y soporte de CookieJar
- Solicitud basada en registro SRV en lugar de URL de host
- Configuración del cliente como Tiempo de espera, RedirectPolicy, Proxy, TLSClientConfig, Transporte, etc.
- Opcionalmente, permite la solicitud GET con carga útil
- Admite el registro de la biblioteca JSON externa en Resty
- Expone el lector de respuestas sin leer la respuesta (sin desarme automático) si es necesario
- Opción para especificar el tipo de contenido esperado cuando falta el encabezado del tipo de contenido de respuesta. 
- Admite la implementación de http.RoundTripper
- seguridad concurrente con goroutine
- Seguimiento podemos usar Client.EnableTrace y Request.EnableTrace
- Desde v2.4.0, la información de seguimiento contiene un valor de RequestAttempt y el objeto Request contiene un atributo de intento.
- Modo de depuración
- Funciona con HTTP/2 y HTTP/1.1
Puf un monton y si llegaste hasta aca leyendo, te felicito. Ahora vamos a ver un ejemplo, imprimir datos de la api de github : 
package main
import (
	"bufio"
	"fmt"
	"github.com/go-resty/resty/v2"
	"os"
	"strings"
)
func main() {
	fmt.Println("Ingrese el usuario de github : ")
	reader := bufio.NewReader(os.Stdin)
	user, _ := reader.ReadString('\n')
	user = strings.ReplaceAll(user, "\n", "")
	url := "https://api.github.com/users/" + user
	// Create a Resty Client
	client := resty.New()
	resp, err := client.R().
		EnableTrace().
		Get(url)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("  Status Code:", resp.StatusCode())
		fmt.Println("  Status     :", resp.Status())
		fmt.Println("  Proto      :", resp.Proto())
		fmt.Println("  Time       :", resp.Time())
		fmt.Println("  Received At:", resp.ReceivedAt())
		fmt.Println("  Body       :\n", resp)
		fmt.Println()
		// Explore trace info
		fmt.Println("Request Trace Info:")
		ti := resp.Request.TraceInfo()
		fmt.Println("  DNSLookup     :", ti.DNSLookup)
		fmt.Println("  ConnTime      :", ti.ConnTime)
		fmt.Println("  TCPConnTime   :", ti.TCPConnTime)
		fmt.Println("  TLSHandshake  :", ti.TLSHandshake)
		fmt.Println("  ServerTime    :", ti.ServerTime)
		fmt.Println("  ResponseTime  :", ti.ResponseTime)
		fmt.Println("  TotalTime     :", ti.TotalTime)
		fmt.Println("  IsConnReused  :", ti.IsConnReused)
		fmt.Println("  IsConnWasIdle :", ti.IsConnWasIdle)
		fmt.Println("  ConnIdleTime  :", ti.ConnIdleTime)
		fmt.Println("  RequestAttempt:", ti.RequestAttempt)
		fmt.Println("  RemoteAddr    :", ti.RemoteAddr.String())
	}
}
Y si ingresamos emanuelpeg por ejemplo obtendremos : 
Ingrese el usuario de github : 
emanuelpeg
  Status Code: 200
  Status     : 200 OK
  Proto      : HTTP/2.0
  Time       : 365.365001ms
  Received At: 2022-12-28 16:25:37.481908946 -0300 -03 m=+9.137266439
  Body       :
 {"login":"emanuelpeg","id":1281319,"node_id":"MDQ6VXNlcjEyODEzMTk=","avatar_url":"https://avatars.githubusercontent.com/u/1281319?v=4","gravatar_id":"","url":"https://api.github.com/users/emanuelpeg","html_url":"https://github.com/emanuelpeg","followers_url":"https://api.github.com/users/emanuelpeg/followers","following_url":"https://api.github.com/users/emanuelpeg/following{/other_user}","gists_url":"https://api.github.com/users/emanuelpeg/gists{/gist_id}","starred_url":"https://api.github.com/users/emanuelpeg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emanuelpeg/subscriptions","organizations_url":"https://api.github.com/users/emanuelpeg/orgs","repos_url":"https://api.github.com/users/emanuelpeg/repos","events_url":"https://api.github.com/users/emanuelpeg/events{/privacy}","received_events_url":"https://api.github.com/users/emanuelpeg/received_events","type":"User","site_admin":false,"name":"Emanuel","company":"assembly","blog":"http://emanuelpeg.blogspot.com/","location":"Crespo","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":51,"public_gists":19,"followers":15,"following":9,"created_at":"2011-12-23T03:12:26Z","updated_at":"2022-12-12T19:06:19Z"}
Request Trace Info:
  DNSLookup     : 33.874537ms
  ConnTime      : 165.492638ms
  TCPConnTime   : 48.333281ms
  TLSHandshake  : 83.032505ms
  ServerTime    : 199.757211ms
  ResponseTime  : 274.029µs
  TotalTime     : 365.365001ms
  IsConnReused  : false
  IsConnWasIdle : false
  ConnIdleTime  : 0s
  RequestAttempt: 1
  RemoteAddr    : 20.201.28.148:443
Process finished with the exit code 0
Y Listo!!