Fixes #22: Fixes style issues
diff --git a/lexer.go b/lexer.go
index b6d28b4..b057da5 100644
--- a/lexer.go
+++ b/lexer.go
@@ -45,7 +45,7 @@
 	tokenEOL
 )
 
-var tokenTypeNames []string = []string{
+var tokenTypeNames = []string{
 	"EOF",
 	"Comment",
 	"Key",
@@ -142,10 +142,10 @@
 	for i := l.start; i < l.pos; {
 		r, width := utf8.DecodeRuneInString(l.input[i:])
 		if r == '\n' {
-			l.line += 1
+			l.line++
 			l.col = 1
 		} else {
-			l.col += 1
+			l.col++
 		}
 		i += width
 	}
@@ -262,10 +262,10 @@
 		case '=':
 			return l.errorf("cannot have multiple equals for the same key")
 		case '[':
-			l.depth += 1
+			l.depth++
 			return lexLeftBracket
 		case ']':
-			l.depth -= 1
+			l.depth--
 			return lexRightBracket
 		case '#':
 			return lexComment
@@ -275,12 +275,11 @@
 			return lexComma
 		case '\n':
 			l.ignore()
-			l.pos += 1
+			l.pos++
 			if l.depth == 0 {
 				return lexVoid
-			} else {
-				return lexRvalue
 			}
+			return lexRvalue
 		}
 
 		if l.follow("true") {
@@ -373,70 +372,70 @@
 
 func lexLeftBracket(l *lexer) stateFn {
 	l.ignore()
-	l.pos += 1
+	l.pos++
 	l.emit(tokenLeftBracket)
 	return lexRvalue
 }
 
 func lexString(l *lexer) stateFn {
-	l.pos += 1
+	l.pos++
 	l.ignore()
-	growing_string := ""
+	growingString := ""
 
 	for {
 		if l.peek() == '"' {
-			l.emitWithValue(tokenString, growing_string)
-			l.pos += 1
+			l.emitWithValue(tokenString, growingString)
+			l.pos++
 			l.ignore()
 			return lexRvalue
 		}
 
 		if l.follow("\\\"") {
-			l.pos += 1
-			growing_string += "\""
+			l.pos++
+			growingString += "\""
 		} else if l.follow("\\n") {
-			l.pos += 1
-			growing_string += "\n"
+			l.pos++
+			growingString += "\n"
 		} else if l.follow("\\b") {
-			l.pos += 1
-			growing_string += "\b"
+			l.pos++
+			growingString += "\b"
 		} else if l.follow("\\f") {
-			l.pos += 1
-			growing_string += "\f"
+			l.pos++
+			growingString += "\f"
 		} else if l.follow("\\/") {
-			l.pos += 1
-			growing_string += "/"
+			l.pos++
+			growingString += "/"
 		} else if l.follow("\\t") {
-			l.pos += 1
-			growing_string += "\t"
+			l.pos++
+			growingString += "\t"
 		} else if l.follow("\\r") {
-			l.pos += 1
-			growing_string += "\r"
+			l.pos++
+			growingString += "\r"
 		} else if l.follow("\\\\") {
-			l.pos += 1
-			growing_string += "\\"
+			l.pos++
+			growingString += "\\"
 		} else if l.follow("\\u") {
 			l.pos += 2
 			code := ""
 			for i := 0; i < 4; i++ {
 				c := l.peek()
-				l.pos += 1
+				l.pos++
 				if !isHexDigit(c) {
 					return l.errorf("unfinished unicode escape")
 				}
 				code = code + string(c)
 			}
-			l.pos -= 1
+			l.pos--
 			intcode, err := strconv.ParseInt(code, 16, 32)
 			if err != nil {
 				return l.errorf("invalid unicode escape: \\u" + code)
 			}
-			growing_string += string(rune(intcode))
+			growingString += string(rune(intcode))
 		} else if l.follow("\\") {
-			l.pos += 1
+			l.pos++
 			return l.errorf("invalid escape sequence: \\" + string(l.peek()))
 		} else {
-			growing_string += string(l.peek())
+			growingString += string(l.peek())
 		}
 
 		if l.next() == eof {
@@ -449,18 +448,17 @@
 
 func lexKeyGroup(l *lexer) stateFn {
 	l.ignore()
-	l.pos += 1
+	l.pos++
 
 	if l.peek() == '[' {
 		// token '[[' signifies an array of anonymous key groups
-		l.pos += 1
+		l.pos++
 		l.emit(tokenDoubleLeftBracket)
 		return lexInsideKeyGroupArray
-	} else {
-		// vanilla key group
-		l.emit(tokenLeftBracket)
-		return lexInsideKeyGroup
 	}
+	// vanilla key group
+	l.emit(tokenLeftBracket)
+	return lexInsideKeyGroup
 }
 
 func lexInsideKeyGroupArray(l *lexer) stateFn {
@@ -470,11 +468,11 @@
 				l.emit(tokenKeyGroupArray)
 			}
 			l.ignore()
-			l.pos += 1
+			l.pos++
 			if l.peek() != ']' {
 				break // error
 			}
-			l.pos += 1
+			l.pos++
 			l.emit(tokenDoubleRightBracket)
 			return lexVoid
 		} else if l.peek() == '[' {
@@ -495,7 +493,7 @@
 				l.emit(tokenKeyGroup)
 			}
 			l.ignore()
-			l.pos += 1
+			l.pos++
 			l.emit(tokenRightBracket)
 			return lexVoid
 		} else if l.peek() == '[' {
@@ -511,7 +509,7 @@
 
 func lexRightBracket(l *lexer) stateFn {
 	l.ignore()
-	l.pos += 1
+	l.pos++
 	l.emit(tokenRightBracket)
 	return lexRvalue
 }
@@ -521,33 +519,33 @@
 	if !l.accept("+") {
 		l.accept("-")
 	}
-	point_seen := false
-	digit_seen := false
+	pointSeen := false
+	digitSeen := false
 	for {
 		next := l.next()
 		if next == '.' {
-			if point_seen {
+			if pointSeen {
 				return l.errorf("cannot have two dots in one float")
 			}
 			if !isDigit(l.peek()) {
 				return l.errorf("float cannot end with a dot")
 			}
-			point_seen = true
+			pointSeen = true
 		} else if isDigit(next) {
-			digit_seen = true
+			digitSeen = true
 		} else {
 			l.backup()
 			break
 		}
-		if point_seen && !digit_seen {
+		if pointSeen && !digitSeen {
 			return l.errorf("cannot start float with a dot")
 		}
 	}
 
-	if !digit_seen {
+	if !digitSeen {
 		return l.errorf("no digit in that number")
 	}
-	if point_seen {
+	if pointSeen {
 		l.emit(tokenFloat)
 	} else {
 		l.emit(tokenInteger)
diff --git a/parser.go b/parser.go
index 9945d39..c9f42a3 100644
--- a/parser.go
+++ b/parser.go
@@ -94,7 +94,7 @@
 }
 
 func parseGroupArray(p *parser) parserStateFn {
-	start_token := p.getToken() // discard the [[
+	startToken := p.getToken() // discard the [[
 	key := p.getToken()
 	if key.typ != tokenKeyGroupArray {
 		p.raiseError(key, "unexpected token %s, was expecting a key group array", key)
@@ -103,21 +103,21 @@
 	// get or create group array element at the indicated part in the path
 	keys := strings.Split(key.val, ".")
 	p.tree.createSubTree(keys[:len(keys)-1]) // create parent entries
-	dest_tree := p.tree.GetPath(keys)
+	destTree := p.tree.GetPath(keys)
 	var array []*TomlTree
-	if dest_tree == nil {
+	if destTree == nil {
 		array = make([]*TomlTree, 0)
-	} else if dest_tree.([]*TomlTree) != nil {
-		array = dest_tree.([]*TomlTree)
+	} else if destTree.([]*TomlTree) != nil {
+		array = destTree.([]*TomlTree)
 	} else {
 		p.raiseError(key, "key %s is already assigned and not of type group array", key)
 	}
 	p.currentGroup = keys
 
 	// add a new tree to the end of the group array
-	new_tree := newTomlTree()
-	new_tree.position = start_token.Position
-	array = append(array, new_tree)
+	newTree := newTomlTree()
+	newTree.position = startToken.Position
+	array = append(array, newTree)
 	p.tree.SetPath(p.currentGroup, array)
 
 	// remove all keys that were children of this group array
@@ -144,7 +144,7 @@
 }
 
 func parseGroup(p *parser) parserStateFn {
-	start_token := p.getToken() // discard the [
+	startToken := p.getToken() // discard the [
 	key := p.getToken()
 	if key.typ != tokenKeyGroup {
 		p.raiseError(key, "unexpected token %s, was expecting a key group", key)
@@ -162,8 +162,8 @@
 	}
 	p.assume(tokenRightBracket)
 	p.currentGroup = keys
-	target_tree := p.tree.GetPath(p.currentGroup).(*TomlTree)
-	target_tree.position = start_token.Position
+	targetTree := p.tree.GetPath(p.currentGroup).(*TomlTree)
+	targetTree.position = startToken.Position
 	return parseStart(p)
 }
 
@@ -171,33 +171,33 @@
 	key := p.getToken()
 	p.assume(tokenEqual)
 	value := parseRvalue(p)
-	var group_key []string
+	var groupKey []string
 	if len(p.currentGroup) > 0 {
-		group_key = p.currentGroup
+		groupKey = p.currentGroup
 	} else {
-		group_key = []string{}
+		groupKey = []string{}
 	}
 
 	// find the group to assign, looking out for arrays of groups
-	var target_node *TomlTree
-	switch node := p.tree.GetPath(group_key).(type) {
+	var targetNode *TomlTree
+	switch node := p.tree.GetPath(groupKey).(type) {
 	case []*TomlTree:
-		target_node = node[len(node)-1]
+		targetNode = node[len(node)-1]
 	case *TomlTree:
-		target_node = node
+		targetNode = node
 	default:
 		p.raiseError(key, "Unknown group type for path: %s",
-			strings.Join(group_key, "."))
+			strings.Join(groupKey, "."))
 	}
 
 	// assign value to the found group
-	local_key := []string{key.val}
-	final_key := append(group_key, key.val)
-	if target_node.GetPath(local_key) != nil {
+	localKey := []string{key.val}
+	finalKey := append(groupKey, key.val)
+	if targetNode.GetPath(localKey) != nil {
 		p.raiseError(key, "The following key was defined twice: %s",
-			strings.Join(final_key, "."))
+			strings.Join(finalKey, "."))
 	}
-	target_node.values[key.val] = &tomlValue{value, key.Position}
+	targetNode.values[key.val] = &tomlValue{value, key.Position}
 	return parseStart(p)
 }
 
@@ -244,7 +244,7 @@
 }
 
 func parseArray(p *parser) []interface{} {
-	array := make([]interface{}, 0)
+	var array []interface{}
 	arrayType := reflect.TypeOf(nil)
 	for {
 		follow := p.peek()
diff --git a/position.go b/position.go
index 266bfcb..fd42a0d 100644
--- a/position.go
+++ b/position.go
@@ -6,7 +6,7 @@
 	"fmt"
 )
 
-// position within a TOML document
+// Position within a TOML document
 type Position struct {
 	Line int // line within the document
 	Col  int // column within the line
@@ -18,6 +18,8 @@
 	return fmt.Sprintf("(%d, %d)", p.Line, p.Col)
 }
 
+// Invalid returns wheter or not the position is valid (i.e. with negative or
+// null values)
 func (p *Position) Invalid() bool {
 	return p.Line <= 0 || p.Col <= 0
 }
diff --git a/toml.go b/toml.go
index aa2ab6b..7cd74b0 100644
--- a/toml.go
+++ b/toml.go
@@ -1,4 +1,4 @@
-// TOML markup language parser.
+// Package toml is a TOML markup language parser.
 //
 // This version supports the specification as described in
 // https://github.com/toml-lang/toml/blob/master/versions/toml-v0.2.0.md
@@ -19,8 +19,7 @@
 	position Position
 }
 
-// Definition of a TomlTree.
-// This is the result of the parsing of a TOML file.
+// TomlTree is the result of the parsing of a TOML file.
 type TomlTree struct {
 	values   map[string]interface{}
 	position Position
@@ -41,7 +40,7 @@
 	return t.HasPath(strings.Split(key, "."))
 }
 
-// Returns true if the given path of keys exists, false otherwise.
+// HasPath returns true if the given path of keys exists, false otherwise.
 func (t *TomlTree) HasPath(keys []string) bool {
 	return t.GetPath(keys) != nil
 }
@@ -49,8 +48,8 @@
 // Keys returns the keys of the toplevel tree.
 // Warning: this is a costly operation.
 func (t *TomlTree) Keys() []string {
-	keys := make([]string, 0)
-	for k, _ := range t.values {
+	var keys []string
+	for k := range t.values {
 		keys = append(keys, k)
 	}
 	return keys
@@ -67,15 +66,15 @@
 	return t.GetPath(strings.Split(key, "."))
 }
 
-// Returns the element in the tree indicated by 'keys'.
+// GetPath returns the element in the tree indicated by 'keys'.
 // If keys is of length zero, the current tree is returned.
 func (t *TomlTree) GetPath(keys []string) interface{} {
 	if len(keys) == 0 {
 		return t
 	}
 	subtree := t
-	for _, intermediate_key := range keys[:len(keys)-1] {
-		value, exists := subtree.values[intermediate_key]
+	for _, intermediateKey := range keys[:len(keys)-1] {
+		value, exists := subtree.values[intermediateKey]
 		if !exists {
 			return nil
 		}
@@ -101,6 +100,7 @@
 	}
 }
 
+// GetPosition returns the position of the given key.
 func (t *TomlTree) GetPosition(key string) Position {
 	if key == "" {
 		return Position{0, 0}
@@ -108,15 +108,15 @@
 	return t.GetPositionPath(strings.Split(key, "."))
 }
 
-// Returns the element in the tree indicated by 'keys'.
+// GetPositionPath returns the element in the tree indicated by 'keys'.
 // If keys is of length zero, the current tree is returned.
 func (t *TomlTree) GetPositionPath(keys []string) Position {
 	if len(keys) == 0 {
 		return t.position
 	}
 	subtree := t
-	for _, intermediate_key := range keys[:len(keys)-1] {
-		value, exists := subtree.values[intermediate_key]
+	for _, intermediateKey := range keys[:len(keys)-1] {
+		value, exists := subtree.values[intermediateKey]
 		if !exists {
 			return Position{0, 0}
 		}
@@ -150,7 +150,7 @@
 	}
 }
 
-// Same as Get but with a default value
+// GetDefault works like Get but with a default value
 func (t *TomlTree) GetDefault(key string, def interface{}) interface{} {
 	val := t.Get(key)
 	if val == nil {
@@ -166,16 +166,16 @@
 	t.SetPath(strings.Split(key, "."), value)
 }
 
-// Set an element in the tree.
+// SetPath sets an element in the tree.
 // Keys is an array of path elements (e.g. {"a","b","c"}).
 // Creates all necessary intermediates trees, if needed.
 func (t *TomlTree) SetPath(keys []string, value interface{}) {
 	subtree := t
-	for _, intermediate_key := range keys[:len(keys)-1] {
-		nextTree, exists := subtree.values[intermediate_key]
+	for _, intermediateKey := range keys[:len(keys)-1] {
+		nextTree, exists := subtree.values[intermediateKey]
 		if !exists {
 			nextTree = newTomlTree()
-			subtree.values[intermediate_key] = &nextTree // add new element here
+			subtree.values[intermediateKey] = &nextTree // add new element here
 		}
 		switch node := nextTree.(type) {
 		case *TomlTree:
@@ -184,7 +184,7 @@
 			// go to most recent element
 			if len(node) == 0 {
 				// create element if it does not exist
-				subtree.values[intermediate_key] = append(node, newTomlTree())
+				subtree.values[intermediateKey] = append(node, newTomlTree())
 			}
 			subtree = node[len(node)-1]
 		}
@@ -201,14 +201,14 @@
 // Returns nil on success, error object on failure
 func (t *TomlTree) createSubTree(keys []string) error {
 	subtree := t
-	for _, intermediate_key := range keys {
-		if intermediate_key == "" {
+	for _, intermediateKey := range keys {
+		if intermediateKey == "" {
 			return fmt.Errorf("empty intermediate table")
 		}
-		nextTree, exists := subtree.values[intermediate_key]
+		nextTree, exists := subtree.values[intermediateKey]
 		if !exists {
 			nextTree = newTomlTree()
-			subtree.values[intermediate_key] = nextTree
+			subtree.values[intermediateKey] = nextTree
 		}
 
 		switch node := nextTree.(type) {
@@ -218,7 +218,7 @@
 			subtree = node
 		default:
 			return fmt.Errorf("unknown type for path %s (%s)",
-				strings.Join(keys, "."), intermediate_key)
+				strings.Join(keys, "."), intermediateKey)
 		}
 	}
 	return nil
@@ -228,7 +228,7 @@
 func encodeTomlString(value string) string {
 	result := ""
 	for _, rr := range value {
-		int_rr := uint16(rr)
+		intRr := uint16(rr)
 		switch rr {
 		case '\b':
 			result += "\\b"
@@ -245,8 +245,8 @@
 		case '\\':
 			result += "\\\\"
 		default:
-			if int_rr < 0x001F {
-				result += fmt.Sprintf("\\u%0.4X", int_rr)
+			if intRr < 0x001F {
+				result += fmt.Sprintf("\\u%0.4X", intRr)
 			} else {
 				result += string(rr)
 			}
@@ -269,9 +269,8 @@
 	case bool:
 		if value {
 			return "true"
-		} else {
-			return "false"
 		}
+		return "false"
 	case time.Time:
 		return tab + value.Format(time.RFC3339)
 	case []interface{}:
@@ -291,24 +290,24 @@
 	result := ""
 	for k, v := range t.values {
 		// figure out the keyspace
-		combined_key := k
+		combinedKey := k
 		if keyspace != "" {
-			combined_key = keyspace + "." + combined_key
+			combinedKey = keyspace + "." + combinedKey
 		}
 		// output based on type
 		switch node := v.(type) {
 		case []*TomlTree:
 			for _, item := range node {
 				if len(item.Keys()) > 0 {
-					result += fmt.Sprintf("\n%s[[%s]]\n", indent, combined_key)
+					result += fmt.Sprintf("\n%s[[%s]]\n", indent, combinedKey)
 				}
-				result += item.toToml(indent+"  ", combined_key)
+				result += item.toToml(indent+"  ", combinedKey)
 			}
 		case *TomlTree:
 			if len(node.Keys()) > 0 {
-				result += fmt.Sprintf("\n%s[%s]\n", indent, combined_key)
+				result += fmt.Sprintf("\n%s[%s]\n", indent, combinedKey)
 			}
-			result += node.toToml(indent+"  ", combined_key)
+			result += node.toToml(indent+"  ", combinedKey)
 		case *tomlValue:
 			result += fmt.Sprintf("%s%s = %s\n", indent, k, toTomlValue(node.value, 0))
 		default:
@@ -318,13 +317,13 @@
 	return result
 }
 
-// Generates a human-readable representation of the current tree.
+// ToString generates a human-readable representation of the current tree.
 // Output spans multiple lines, and is suitable for ingest by a TOML parser
 func (t *TomlTree) ToString() string {
 	return t.toToml("", "")
 }
 
-// Create a TomlTree from a string.
+// Load creates a TomlTree from a string.
 func Load(content string) (tree *TomlTree, err error) {
 	defer func() {
 		if r := recover(); r != nil {
@@ -339,7 +338,7 @@
 	return
 }
 
-// Create a TomlTree from a file.
+// LoadFile creates a TomlTree from a file.
 func LoadFile(path string) (tree *TomlTree, err error) {
 	buff, ferr := ioutil.ReadFile(path)
 	if ferr != nil {