Дано выражение f типа функции F,
f(a1, a2, … an)
вызывается f с аргументами a1, a2,… an. За исключением одного особого случая, аргументы должны быть однозначными выражениями, присваиваемыми (assignable) типам параметров F и оцениваться перед вызовом функции. Тип выражения является типом результата F. Вызов метода аналогичен, но сам метод указывается в качестве селектора при значении типа получателя для метода.
math.Atan2(x, y) // вызов функции
var pt *Point
pt.Scale(3.5) // вызов метода с получателем pt
При вызове функции значение и аргументы функции оцениваются в обычном порядке. После того, как они оценены, параметры вызова передаются функции по значению, и вызываемая функция начинает выполнение. Возвращаемые параметры функции передаются по значению обратно в вызывающую функцию, когда функция делает возврат (return).
Вызов нулевого значения функции приводит к панике во время выполнения (run-time panic).
В особом случае, если возвращаемые значения функции или метода g равны по числу и индивидуально присваиваются параметрам другой функции или метода f, то вызов f(g(parameters_of_g)) вызовет f после привязки возвращаемых значений от g к параметрам f по порядку. Вызов f не должен содержать никаких параметров, кроме вызова g, а g должен иметь хотя бы одно возвращаемое значение. Если f имеет последний параметр ..., ему присваиваются возвращаемые значения g, которые остаются после назначения обычных параметров.
func Split(s string, pos int) (string, string) {
return s[0:pos], s[pos:]
}
func Join(s, t string) string {
return s + t
}
if Join(Split(value, len(value)/2)) != value {
log.Panic("test fails")
}
Вызов метода x.m() действителен, если набор методов (тип) x содержит m и список аргументов можно назначить списку параметров m. Если x адресуемый, а набор методов &x содержит m, x.m() является сокращением для (&x).m():
var p Point
p.Scale(3.5)
Нет отдельного типа метода и нет литералов метода.
Читайте также:
Комментариев нет:
Отправить комментарий