Go Concepts - Functions: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 26: Line 26:


   return <return-value1>, <return-value2>
   return <return-value1>, <return-value2>
}
</pre>
<pre>
func add(a int, b int) int {
  return a + b;
}
}
</pre>
</pre>
Line 31: Line 37:
The return type declarations are optional, if the function does not return anything.
The return type declarations are optional, if the function does not return anything.


A function may return one or more results.
==Multiple Results==


Examples:
A function may return one or more results:


<pre>
<pre>
func add(a int, b int) int {
  return a + b;
}
func add(a int, b int) (int, int) {
func add(a int, b int) (int, int) {
   return a + b, a - b;
   return a + b, a - b;

Revision as of 03:48, 28 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. From this perspective, functions are conceptually different from methods.

The parameters and the return types are known as the function's signature.

Syntax

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

   // function's body
   statement1
   statement2
   ...

   return <return-value1>, <return-value2>
}
func add(a int, b int) int {
   return a + b;
}

The return type declarations are optional, if the function does not return anything.

Multiple Results

A function may return one or more results:

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

Return Types can Have Names

func f() (r int) {
   r = 1
   return
}

Varidic Functions

Functions and Variable Scopes

A function does not have access to variables declares in functions that call it.

A function does have access to package level variables declared in the function's package.

Also see:

Variable Scopes

Function Literals

The main() Function

Compiling an Executable

Built-in Functions

The built-in functions are available by default, without the need to import any package. They are what the specification calls pre-defined function identifiers. Their semantics depends on the arguments.

Conversion between Types

Conversion between types look like functions, see Conversion between Types.

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.

Syntax

func <receiver> <method-name> (...) {

    // the rest of declaration is similar to a function's
    ...
}

Difference between Functions and Methods

Receivers

Value Receivers

Pointer Receivers