Как динамически создать гиперссылку (на Golang)?
Как программно создать ссылку?
Не выходит приклеить GET-запрос к тексту ссылки (в href). Пробую так (другие функции форматирования тоже пробовал):
<br>
var tokenString = string(hashLink)
<br>
var dataRespon = fmt.Sprintf("Данные сохранены. Нажмите <a
href=\"https://site.com/Link?%d\">ссылку</a>.", tokenString)
Или так:
<br>
var myLink = "https://site.com/Link?"
<br>
var tokenString = string(hashLink)
<br>
var dataRespon = fmt.Sprintf("Данные сохранены. Нажмите <a href=\"%d%d\">ссылку</a>.", myLink, tokenString)
В итоге хочу получить ссылку типа:
<a href="https://site.com/Link?$2a$10$Xj10hPlP0n9bWfql3P/oz">ссылку</a>
оно же: https://site.com/Link?$2a$10$Xj10hPlP0n9bWfql3P/oz
Заранее спасибо!
Ответы (2 шт):
Если посмотреть в документацию на Sprintf то станет очевидно, что для обработки строки нужно использовать %s. Вы же используете %d, что используется для вывода числа.
Поэтому либо вот так
var tokenString = string(hashLink)
var dataRespon = fmt.Sprintf("Данные сохранены. Нажмите <a href=\"https://site.com/Link?%s\">ссылку</a>.", tokenString)
или
var myLink = "https://site.com/Link?"
var tokenString = string(hashLink)
var dataRespon = fmt.Sprintf("Данные сохранены. Нажмите <a href=\"%s%s\">ссылку</a>.", myLink, tokenString)
правда, мой ответ базируется на том, что tokenString содержит правильную строку.
Ответ @KoVadim, конечно, работает. И в некоторых
ситуациях, возможно, даже вполне достаточен. Но если вы хотите
избежать опечаток и максимально обезопасить себя от различного рода
инъекций кода, используйте более структурированный
подход. Для создания URL есть
пакет net/url:
var link = &url.URL{
Scheme: "https",
Host: "site.com",
Path: "/Link",
RawQuery: "$2a$10$Xj10hPlP0n9bWfql3P/oz",
}
Для безопасной работы же с HTML-шаблонами есть
html/template
(не путать с text/template; путаница ужасная, увы):
const page = `Данные сохранены. Нажмите <a href="{{ .Link }}">ссылку</a>.` + "\n"
var tpl *template.Template
tpl, err = template.New("main").Parse(page)
// Check err.
type resp struct {
Link *url.URL
}
var r = &resp{
Link: link,
}
err = tpl.Execute(os.Stdout, r)
// Check err.