Как распечатать тело http-ответа в Go?

#go

#Вперед

Вопрос:

Я использую Google Cloud Run для запуска приложения (например, пример приложения) У меня есть следующий сценарий в Go:

 package main

import (
        "fmt"
        "log"
        "net/http"
        "os"
        "os/exec"
)

func handler(w http.ResponseWriter, r *http.Request) {
        log.Print("helloworld: received a request")

        cmd := exec.CommandContext(r.Context(), "/bin/sh", "script.sh")
        cmd.Stderr = os.Stderr
        out, err := cmd.Output()
        if err != nil {
                w.WriteHeader(500)
        }
        w.Write(out)
}

func main() {
        log.Print("helloworld: starting server...")

        http.HandleFunc("/", handler)

        port := os.Getenv("PORT")
        if port == "" {
                port = "8080"
        }

        log.Printf("helloworld: listening on %s", port)
        log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
 

Мне нужно войти.распечатать тело ответов из script.sh команды. Как я могу это сделать?

Комментарии:

1. blog.kowalczyk.info/article/wOYk/…

2. Ваш вопрос, похоже, отвечает сам на себя, log.Print вызывая вас log.Print , который вы уже использовали в другом месте своего кода, поэтому неясно, с чем у вас возникли проблемы. Можете ли вы уточнить свой вопрос?

3. Нет отношения к облачному запуску, это чистый вопрос Go. У вас есть много учебников / примеров этого в Интернете. Однако зачем вызывать SH-скрипт в коде Go? Почему бы не закодировать все в Go?

Ответ №1:

На вашем сервере

w.Запись (вывод)

отправляет ответ от script.sh как []байт. Вы можете добавить над этой строкой следующий журнал.Печать (строка (out))