Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится mailbox/inbox/folder/123.
package main
Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится mailbox/inbox/folder/123.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
package main
import "fmt"
func execute(template string, args ...interface{}) string { return template }
func main() { res := execute("mailbox/:mailbox/folder/:folder_id", "inbox", 123) // Output: mailbox/inbox/folder/123 fmt.Println(res) }
Ответ
Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится mailbox/inbox/folder/123.
func execute(template string, args ...interface{}) string {
parts := strings.Split(template, "/")
n := 0
for i, part := range parts {
if strings.HasPrefix(part, ":") && len(part) > 1 {
if n == len(args) { panic("not enough arguments") }
parts[i] = fmt.Sprint(args[n])
n++
}
}
if n != len(args) { panic("too many arguments") }
return strings.Join(parts, "/")
}
Нужны импорты fmt и strings. При фиксированной сигнатуре неправильное число аргументов здесь считается ошибкой программиста; для пользовательского ввода лучше вернуть (string, error). Если это URL, значения дополнительно требуют корректного path-escaping.