Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Параметры и аргументы функций в Go

#golang


Добрый день!
Подскажите, пожалуйста, по двум вопросам.
1) Можно ли в Go писать функции с необязательными параметрами? Типа как в PHP
function MyFunc($var1, $var2 = 1){}

2) Есть ли в Go возможность передавать значение переменной по ссылке? Опять же, как в PHP
function MyFunc($var1, &$var2){ $var2 = 1;}

После PHP этих приятных мелочей очень не хватает, а гугление что-то в этот раз не
помогло.
Заранее спасибо!    


Ответы

Ответ 1



опциональных параметров нету функция должна возвращать значение, а не изменять аргумент не стоит писать на одном языке в стиле другого языка

Ответ 2



1) Можно ли в Go писать функции с необязательными параметрами? Типа как в PHP Точно также -- нет. Но есть пути обхода, своего рода костыли: Можно принимать переменное кол-во аргументов(func (params... interface{})), и тогда аргументы будут опциональными. Правда не именованными. Можно передавать словарь map[string]interface{}, немного громоздко, но иногда другого выхода нет. 2) Есть ли в Go возможность передавать значение переменной по ссылке? Опять-же как в PHP В Go нет ссылок, но есть указатели. Передавайте по указателю. UPD: пример использования указателя. package main import "fmt" func f(i *int) { (* i) = 2 } func main() { i := 1 f(&i) fmt.Println(i) } Напечатает 2.

Ответ 3



Мне кажется сделать параметр который не обязательно передавать в функцию не сложно. Значение поумолчанию можно прописать внутри. у меня получилось так: package main import "fmt" func addText(base string, opt ...string) (s string) { if len(opt) > 0 { base += opt[0] } else { base += "-" //хорошее место для обработки параметра поумолчанию } return base } func main() { fmt.Printf("%s\n", addText("info: ")) fmt.Printf("%s\n", addText("info: ", "done")) } Пожалуйста не сильно ругайте, я новичёк на стековерфлоу...

Комментариев нет:

Отправить комментарий