1) Изучаю Golang, дошел до
map
2) встретил конструкцию
value, ok := products["Hat"]
if (ok) {
fmt.Println("Stored value:", value)
} else {
fmt.Println("No stored value")
}
какой-то
ok comma pattern/idioma
3) смотрим функции - они тоже могут возвращать несколько значений
4) пробуем запихнуть все это одним махом в
printf()
fmt.Printf("Цена: %v , ok= %t\n", products["Hat"])
и получаем на выходе: "
Цена: 48.95 , ok= %!t(MISSING)"
с функцией такая же беда:
func swap(x, y string) (string, string) {
return y, x
}
fmt.Printf("Цена: %s , ok= %s\n", swap("1","2"))
и получаем "
multiple-value swap("1", "2") (value of type (string, string)) in single-value context" ....
Вопрос: так как же работает это "вытягивание" нескольких переменных "под капотом" ?
Почему
value, ok := products["Hat"]
a, b := swap("hello", "world")
работает, а
fmt.Printf("Цена: %s , ok= %s\n", swap("1","2"))
нет ?
Казалось бы -
swap()/map возвращает два значения вот и впихни их в первый %s и во второй %s, но нет ....
перефразирую вопрос: можно ли лаконично "раскидать" все значения, возвращаемые функцией/картой по плейсхолдерам
printf() первое возвращаемое значение в первый, второе - во второй и т.д.?