Кажется, что в Go нет способа сделать это точно, но я бы рассмотрел несколько альтернатив:
1) Используйте глобальную переменную (с очевидными и известными компромиссами):
var BaseURL = fmt.Sprintf("http://%s:%d/%s", host, port, path)
(с другой стороны, поскольку host
, port
и path
также жестко запрограммированы, достаточно просто const BaseURL = "http://yourhost:1234/api"
).
2) Обернуть эту глобальную переменнуюв функции:
var baseURL = fmt.Sprintf("http://%s:%d/%s", host, port, path)
func BaseURL() string {
return baseURL
}
3) (на мой взгляд, явный победитель) передает URL-адрес в качестве параметра типу вашего клиента при его использовании:
type RESTClient struct {
BaseURL string
// ...
}
// on the user side:
client := &RESTClient{BaseURL: baseURL}
client.ListResources() // or whatever