Номинация: Худший способ сформировать URL строку в Golang



Давайте я сразу зайду с козырей. Сколько ошибок в коде этой функции вы можете найти за 60 секунд?



func NewConnectionString(host, path, database, user, password string, debug bool) string {

return fmt.Sprintf(

"proto://%s/%s?userName=%s&password=%s&database=%s&debug=%t",

host, path, database, user, password, debug,

)

}




Все ошибки в этом довольно небольшом коде найти и обезвредить довольно сложно. Я попробую их сейчас сформулировать и скомпоновать в две основные:

* очевидная — перепутаны параметры

* не очевидная — параметры не экранируются

Ладно, признавайтесь — наверняка каждый за 60 секунд смог заметить первую ошибку, но не все из вас смогут заметить вторую. Если ваш список ошибок оказался короче, чем мой — тогда прошу под кат.







Читать: https://habr.com/ru/post/657277/?utm_campaign=657277