#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")) } Пожалуйста не сильно ругайте, я новичёк на стековерфлоу...
Комментариев нет:
Отправить комментарий