Я локально подтвердил, что ваш код, как показано, должен работать.
Вот код, который я использовал:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
func main() {
http.HandleFunc("/", handler)
go func(){
http.ListenAndServe(":8080", nil)
}()
AddHealthCheck()
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there")
}
func panicError(err error) {
if err != nil {
panic(err)
}
}
func AddHealthCheck() (string, error) {
//convert go struct to json
payload := "bob"
jsonPayload, err := json.Marshal(payload)
panicError(err)
// Create client & set timeout
client := &http.Client{}
client.Timeout = time.Second * 15
// Create request
req, err := http.NewRequest("POST", "http://localhost:8080", bytes.NewBuffer(jsonPayload))
panicError(err)
req.Header.Set("Content-Type", "application/json")
// Fetch Request
resp, err := client.Do(req)
panicError(err)
defer resp.Body.Close()
// Read Response Body
respBody, err := ioutil.ReadAll(resp.Body)
panicError(err)
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
return string(respBody), nil
}
Приведенный выше код представляет собой слегка урезанную версию вашего кода и выводит тело ответа.(Обратите внимание, что я предоставляю здесь сервер для получения почтового запроса и возврата ответа)
Сервер просто не отправляет вам тело.Вы можете подтвердить это чем-то вроде wireshark.
Если вы возвращаете тело с помощью почтальона, вы должны отправлять другой запрос в почтальоне, чем в го.Иногда бывает трудно понять, в чем разница, поскольку и го, и почтальон могут иногда добавлять заголовки за кулисы, которые вы не видите.Опять же, что-то вроде wireshark может помочь здесь.
Или, если у вас есть доступ к серверу, вы можете добавить туда логи.