package main import ( "fmt" "io" "log" "net" "net/http" "os" ) func main() { // httpExample() httpExample2() /* // Подключаемся к серверу conn, err := net.Deal("tcp", "localhost:4545") if err != nil { fmt.Println(err) return } defer conn.Close() for { var source string // Запрашиваем у пользователя ввод fmt.Print("Введите слово: ") _, err := fmt.Scan(&source) if err != nil { fmt.Println("Некорректный ввод", err) continue } // Отправляем сообщение if n, err := conn.Write([]byte(source)); n == 0 || err != nil { fmt.Println(err) return } // Устанавливаем таймаут на чтение ответа fmt.Println("Ответ:") conn.SetReadDeadLine(time.Now().Add(time.Second * 5)) // Чтение данных в отдельном цикле // Если сервер пришлет больше данных, они будут обработаны for { buff := make([]byte, 1024) n, err := conn.Read(buff) if err != nil { break } fmt.Print(string(buff[0:n])) // Сбрасываем таймаут до 700 миллисекунд после первых 1024 байт conn.SetReadDeadLine(time.Now().Add(time.Millisecond)) } } */ } func httpExample() { httpRequest := "GET / HTTP/1.1\n" + "Host: go.dev\r\n" + "Connection: close\r\n" + "\r\n" conn, err := net.Dial("tcp", "go.dev:80") if err != nil { fmt.Println(err) return } defer conn.Close() if _, err = conn.Write([]byte(httpRequest)); err != nil { fmt.Println(err) return } io.Copy(os.Stdout, conn) fmt.Println("Done") } func httpExample2() { // http запрос с методом GET resp, err := http.Get("https://golang.org") if err != nil { log.Println(err) return } // Закрываем телол ответа после работы с ним defer resp.Body.Close() data, err := io.ReadAll(resp.Body) // читаем ответ if err != nil { log.Println(err) return } fmt.Printf("%s", data) }