Go Concepts - Functions: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 54: Line 54:
=Methods=
=Methods=


A ''method'' defines the behavior of a type, and it relies on the state of an instance of the type. The method will - and it is supposed to - change the state.  
A ''method'' defines the behavior of a type, and it relies on the state of an instance of the type. The method will - and it is supposed to - change the state. From this point of view, the method is conceptually different from a [[#Function_Definition|function]].


A method is always [[Go Concepts - Packages#Exported_Identifiers|exported]] by the package it is enclosed in.
A method is always [[Go Concepts - Packages#Exported_Identifiers|exported]] by the package it is enclosed in.

Revision as of 06:39, 22 March 2016

External

Internal

Function Definition

A function declaration starts with the func keyword and it consists in a series of statements applied on a number of inputs, resulting in a number of outputs. Same inputs will always result in the same outputs. Function do not depend on a type instance's state. Functions are conceptually different from methods.

Syntax

func [receiver] <name>(
    [parameter-identifier1] [type1], [parameter-identifier2] [type2], ...) (
    [return-type1], [return-type2], ...) {

   statement1
   statement2
   ...

   return <return-value1>, <return-value2>
}

Examples:

func add(a int, b int) (int) {
   return a + b;
}

Built-in Functions

make() append() copy() delete() .
new() len() cap() . .
. . . . .

Closures

Anonymous function that capture local variables.

More about closures is available here.


Methods

A method defines the behavior of a type, and it relies on the state of an instance of the type. The method will - and it is supposed to - change the state. From this point of view, the method is conceptually different from a function.

A method is always exported by the package it is enclosed in.

Difference between Functions and Methods

Receivers

Value Receivers

Pointer Receivers