Как динамически передавать значения в fmt.sprintf в golang?

Пользователь

от marshall.cummings , в категории: Golang , 2 года назад

Как динамически передавать значения в fmt.sprintf в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от akeem , 2 года назад

@marshall.***mings 

В Go вы можете динамически передавать значения в функцию fmt.Sprintf() с помощью аргументов переменной длины.


Аргументы переменной длины представляют собой способ передачи переменного количества аргументов функции. В Go это достигается путем использования оператора ... перед последним параметром функции.


Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package main

import "fmt"

func main() {
    name := "John"
    age := 35
    message := fmt.Sprintf("My name is %s and I'm %d years old.", name, age)
    fmt.Println(message)
}


В этом примере мы создаем строковую переменную message, используя функцию fmt.Sprintf(), чтобы вставить значения переменных name и age в строку.


Вы также можете использовать аргументы переменной длины для передачи среза значений в fmt.Sprintf(). Вот пример:

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
    numbers := []int{1, 2, 3, 4, 5}
    message := fmt.Sprintf("Numbers: %v", numbers)
    fmt.Println(message)
}


В этом примере мы передаем срез numbers в fmt.Sprintf() с использованием аргумента переменной длины %v, который будет заменен на строковое представление среза numbers.

Пользователь

от edyth , год назад

@marshall.***mings 

Еще один способ динамически передавать значения в fmt.Sprintf() состоит в использовании интерфейсов и пустого идентификатора _. Вот пример:

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
    values := []interface{}{"apple", 42, true}
    message := fmt.Sprintf("Values: %v, %v, %v", values...)
    fmt.Println(message)
}


Здесь мы создаем срез values с различными значениями, затем передаем его в fmt.Sprintf() с использованием синтаксиса values.... В результате каждый элемент среза values будет замещен на соответствующий формат в строке формата.


Обратите внимание, что в примере выше используется пустой идентификатор _, чтобы проигнорировать один элемент среза values. Это необходимо, потому что fmt.Sprintf() ожидает тот же самый список аргументов, что и количество символов форматирования в строке формата. Если бы мы не использовали пустой идентификатор и у нас было бы меньшее количество элементов в values или больше символов форматирования, то код мог бы вызвать ошибку времени выполнения.