@to_east

Вопрос по структурам на го?

Всем привет!
Недавно начал изучение го, и хотя все вобщем-то понятно, но новый подход к четкому разделению данных и логики немного обескураживает. Вот что конкретно мне нужно:
При использовании библиотеки net/http нужно абстрагироваться от некоторых вызовов, сделать инициализацию за кулисами так сказать, код скажет больше:
package main

import (
    "fmt"
    "net/http"
)

type HttpRequest struct {
    url string
    client http.Client
    request http.Request
    ready bool
}

func ClientInit() http.Client {
    client := http.Client{}
    return client
}

func RequestInit(url string) *http.Request {
    req, _ := http.NewRequest("GET", url, nil)
    ua := "Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.0.16"
    req.Header.Add("User-Agent", ua)
    return req
}

func (h_req *HttpRequest) Perform(path string) (*http.Response, error) {
    if !h_req.ready {
        h_req.client = ClientInit()
        h_req.request = *RequestInit(h_req.url)
        h_req.ready = true
    }

    h_req.request.URL.Path = path
    return h_req.client.Do(&h_req.request)
}

func main() {
    h_req := HttpRequest{ url: "http://example.com" }
    resp, _ := h_req.Perform("/hello.html")
    resp, _ = h_req.Perform("/world.html")
    fmt.Println(resp)
}

В функции ClientInit я опустил некоторые действия для краткости, вообщем мне нужно всего два действия это инициализация кастомной структуры HttpRequest с параметром url, и экшен над этой структурой Perform который принимает url_path и отдает http.Response. Код попахивает, но какие рекомендации по улучшению вы можете посоветовать в плане архитектуры. Еще по ходу написания этого топика возникло желание объединить RequestInit и ClientInit в одну функцию.
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы