Ответ 1
map
отличается тем, что является встроенным типом, а не функцией. 2 формы доступа к элементу map
задаются Спецификация языка перехода: выражения индекса.
С помощью функций вы не можете этого сделать. Если функция имеет 2 возвращаемых значения, вы должны "ожидать" их обоих или вообще ничего.
Однако вам разрешено присваивать любое из возвращаемых значений Бланковый идентификатор:
s, b := Hello() // Storing both of the return values
s2, _ := Hello() // Storing only the first
_, b3 := Hello() // Storing only the second
Вы также можете не сохранять любые возвращаемые значения:
Hello() // Just executing it, but storing none of the return values
Примечание: вы можете также присвоить оба возвращаемых значения пустому идентификатору, хотя он не имеет смысла (кроме проверки того, что он имеет ровно два значения возврата):
_, _ = Hello() // Storing none of the return values; note the = instead of :=
Вы также можете попробовать их на Go Playground.
Функция помощника
Если вы используете его много раз и не хотите использовать пустой идентификатор, создайте вспомогательную функцию, которая отбрасывает второе возвращаемое значение:
func Hello2() string {
s, _ := Hello()
return s
}
И теперь вы можете сделать:
value := Hello2()
fmt.Println(value)