Go Concepts - Lexical Structure: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 42: Line 42:
Pre-declared identifiers are available by default, without needing to import anything. They are implicitly declared in the ''universe block''.
Pre-declared identifiers are available by default, without needing to import anything. They are implicitly declared in the ''universe block''.


Pre-declared types: <tt>[[Go Booleans#Overview|bool]]</tt>, <tt>byte</tt>, <tt>complex64</tt>, <tt>complex128</tt>, <tt>error</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>int</tt>, <tt>int8</tt>, <tt>int16</tt>, <tt>int32</tt>, <tt>int64</tt>, <tt>rune</tt>, <tt>string</tt>, <tt>uint</tt>, <tt>uint8</tt>, <tt>uint16</tt>, <tt>uint32</tt>, <tt>uint64</tt>, <tt>uintptr</tt>.
Pre-declared types: <tt>[[Go Booleans#Overview|bool]]</tt>, <tt>[[Go Integers#Overview|byte]]</tt>, <tt>complex64</tt>, <tt>complex128</tt>, <tt>error</tt>, <tt>float32</tt>, <tt>float64</tt>, <tt>[[Go Integers#Overview|int]]</tt>, <tt>[[Go Integers#Overview|int8]]</tt>, <tt>[[Go Integers#Overview|int16]]</tt>, <tt>[[Go Integers#Overview|int32]]</tt>, <tt>[[Go Integers#Overview|int64]]</tt>, <tt>[[Go Integers#Overview|rune]]</tt>, <tt>string</tt>, <tt>[[Go Integers#Overview|uint]]</tt>, <tt>[[Go Integers#Overview|uint8]]</tt>, <tt>[[Go Integers#Overview|uint16]]</tt>, <tt>[[Go Integers#Overview|uint32]]</tt>, <tt>[[Go Integers#Overview|uint64]]</tt>, <tt>[[Go Integers#Overview|uintptr]]</tt>.


Pre-declared constants:  <tt>true</tt>, <tt>false</tt>, <tt>iota</tt>.
Pre-declared constants:  <tt>true</tt>, <tt>false</tt>, <tt>iota</tt>.

Revision as of 18:19, 22 March 2016

Internal

Source Files

Go code goes into source files. They have the .go extension.

Each source file is mandatory declared to belong to a package.

They can then optionally import code from other packages, using the import keyword.

Comments

// to the end of the line
/*
  Multiline
  line 1
  ...
  line n
*/

Whitespace

Whitespace in Go are carriage returns (u+000D), newlines (u+000A), spaces (u+0020) and tabs (u+0009).

Semicolons

TODO https://golang.org/ref/spec#Semicolons

Identifiers

Identifiers name program entities, such as constants, variables, types, functions, etc. An identifier is a sequence of one more letter and digits. The first character must be a letter. The letters are unicode letters or underscore "_".

Pre-Declared Identifiers

Pre-declared identifiers are available by default, without needing to import anything. They are implicitly declared in the universe block.

Pre-declared types: bool, byte, complex64, complex128, error, float32, float64, int, int8, int16, int32, int64, rune, string, uint, uint8, uint16, uint32, uint64, uintptr.

Pre-declared constants: true, false, iota.

Pre-declared functions: append, cap, close, complex, copy, delete, imag, len, make, new, panic, print, println, real, recover.

Pre-declared zero value: nil.

The blank identifier "_".

Identifiers (not values) can be exported or unexported.

Lower-case letter identifiers

Upper-case letter identifiers

Operators

Expression

Operators combine operands into expressions.

Literal

A literal is a notation for representing a fixed value in source code. Go provides literals for booleans, integers, floating-point values, strings, built-in types such as arrays, slices and maps, user-defined types (structs), functions, etc.

Functions

Functions

Statements

Statements control execution flow within a function.

for

if

Keywords

range type func . .
package go . . .
defer chan import . .

Constants

Variables

Variables are always initialized to the type's zero value.


  var <var-name> <type> = <initial-value>

  var a string = "blah"


  <var-name> := <initial-value>

   a := "blah"

Variable Scopes

Package-level variable

Pass by Value vs Pass by Reference

In Go, all variables are passed by value. Even for pointer variables, since the value of the pointer is a memory address, passing pointer variables is still considered pass by value.

Pointers

Pointer variable.