package main

Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится mailbox/inbox/folder/123.

Короткий ответ

Что ответить на собеседовании

Разбейте шаблон на сегменты и последовательно замените сегменты, начинающиеся с двоеточия, на аргументы. Для примера получится 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее