diff --git a/Makefile b/Makefile
index 5114a49..4752710 100644
--- a/Makefile
+++ b/Makefile
@@ -25,4 +25,18 @@
 CGO_LDFLAGS+=-lm -lpthread
 CGO_CFLAGS+=-I. -DHAVE_CONFIG_H=1
 
+GOFMT=gofmt -spaces=true -tabwidth=4 -tabindent=false
+
+BADFMT:=$(shell $(GOFMT) -l $(GOFILES) $(CGOFILES) $(wildcard *_test.go))
+
+all: package
+gofmt: $(BADFMT)
+	@for F in $(BADFMT); do $(GOFMT) -w $$F && echo $$F; done
+
 include $(GOROOT)/src/Make.pkg
+
+ifneq ($(BADFMT),)
+ifneq ($(MAKECMDGOALS),gofmt)
+$(warning WARNING: make gofmt: $(BADFMT))
+endif
+endif
diff --git a/decode.go b/decode.go
index 55544e6..e3749ef 100644
--- a/decode.go
+++ b/decode.go
@@ -18,13 +18,13 @@
 )
 
 type node struct {
-    kind int
+    kind         int
     line, column int
-    tag string
-    value string
-    implicit bool
-    children []*node
-    anchors map[string]*node
+    tag          string
+    value        string
+    implicit     bool
+    children     []*node
+    anchors      map[string]*node
 }
 
 func stry(s *C.yaml_char_t) string {
@@ -37,8 +37,8 @@
 
 type parser struct {
     parser C.yaml_parser_t
-    event C.yaml_event_t
-    doc *node
+    event  C.yaml_event_t
+    doc    *node
 }
 
 func newParser(b []byte) *parser {
@@ -59,7 +59,7 @@
     p.skip()
     if p.event._type != C.YAML_STREAM_START_EVENT {
         panic("Expected stream start event, got " +
-              strconv.Itoa(int(p.event._type)))
+            strconv.Itoa(int(p.event._type)))
     }
     p.skip()
     return &p
@@ -127,15 +127,15 @@
         return nil
     default:
         panic("Attempted to parse unknown event: " +
-              strconv.Itoa(int(p.event._type)))
+            strconv.Itoa(int(p.event._type)))
     }
     panic("Unreachable")
 }
 
 func (p *parser) node(kind int) *node {
     return &node{kind: kind,
-                 line: int(C.int(p.event.start_mark.line)),
-                 column: int(C.int(p.event.start_mark.column))}
+        line:   int(C.int(p.event.start_mark.line)),
+        column: int(C.int(p.event.start_mark.column))}
 }
 
 func (p *parser) document() *node {
@@ -146,7 +146,7 @@
     n.children = append(n.children, p.parse())
     if p.event._type != C.YAML_DOCUMENT_END_EVENT {
         panic("Expected end of document event but got " +
-              strconv.Itoa(int(p.event._type)))
+            strconv.Itoa(int(p.event._type)))
     }
     p.skip()
     return n
@@ -198,7 +198,7 @@
 // Decoder, unmarshals a node into a provided value.
 
 type decoder struct {
-    doc *node
+    doc     *node
     aliases map[string]bool
 }
 
@@ -345,8 +345,8 @@
         }
     case *reflect.FloatValue:
         switch resolved := resolved.(type) {
-        case float:
-            out.Set(float64(resolved))
+        case float64:
+            out.Set(resolved)
             good = true
         }
     case *reflect.PtrValue:
diff --git a/decode_test.go b/decode_test.go
index 57a6653..aca12ca 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -2,7 +2,7 @@
 
 
 import (
-    . "gocheck"
+    .   "gocheck"
     "goyaml"
     "reflect"
     "math"
@@ -11,7 +11,10 @@
 
 var unmarshalIntTest = 123
 
-var unmarshalTests = []struct{data string; value interface{}}{
+var unmarshalTests = []struct {
+    data  string
+    value interface{}
+}{
     {"", &struct{}{}},
     {"{}", &struct{}{}},
 
@@ -41,7 +44,7 @@
     //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported
     {"neginf: -.inf", map[string]interface{}{"neginf": math.Inf(-1)}},
     {"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}},
-    {"fixed: 685_230.15", map[string]float{"fixed": 685230.15}},
+    {"fixed: 685_230.15", map[string]float64{"fixed": 685230.15}},
 
     // Bools from spec
     {"canonical: y", map[string]interface{}{"canonical": true}},
@@ -76,17 +79,27 @@
 
     // Map inside interface with no type hints.
     {"a: {b: c}",
-     map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},
+        map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},
 
     // Structs and type conversions.
-    {"hello: world", &struct{Hello string}{"world"}},
-    {"a: {b: c}", &struct{A struct{B string}}{struct{B string}{"c"}}},
-    {"a: {b: c}", &struct{A *struct{B string}}{&struct{B string}{"c"}}},
-    {"a: 1", &struct{A int}{1}},
-    {"a: [1, 2]", &struct{A []int}{[]int{1, 2}}},
-    {"a: 1", &struct{B int}{0}},
-    {"a: 1", &struct{B int "a"}{1}},
-    {"a: y", &struct{A bool}{true}},
+    {"hello: world", &struct{ Hello string }{"world"}},
+    {"a: {b: c}", &struct {
+        A struct {
+            B string
+        }
+    }{struct{ B string }{"c"}}},
+    {"a: {b: c}", &struct {
+        A *struct {
+            B string
+        }
+    }{&struct{ B string }{"c"}}},
+    {"a: 1", &struct{ A int }{1}},
+    {"a: [1, 2]", &struct{ A []int }{[]int{1, 2}}},
+    {"a: 1", &struct{ B int }{0}},
+    {"a: 1", &struct {
+        B int "a"
+    }{1}},
+    {"a: y", &struct{ A bool }{true}},
 
     // Some cross type conversions
     {"v: 42", map[string]uint{"v": 42}},
@@ -105,13 +118,17 @@
     {"v: !!float '1.1'", map[string]interface{}{"v": 1.1}},
     {"v: !!null ''", map[string]interface{}{"v": nil}},
     {"%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'",
-     map[string]interface{}{"v": 1}},
+        map[string]interface{}{"v": 1}},
 
     // Anchors and aliases.
-    {"a: &x 1\nb: &y 2\nc: *x\nd: *y\n", &struct{A, B, C, D int}{1, 2, 1, 2}},
+    {"a: &x 1\nb: &y 2\nc: *x\nd: *y\n", &struct{ A, B, C, D int }{1, 2, 1, 2}},
     {"a: &a {c: 1}\nb: *a",
-     &struct{A, B struct{C int}}{struct{C int}{1}, struct{C int}{1}}},
-    {"a: &a [1, 2]\nb: *a", &struct{B []int}{[]int{1, 2}}},
+        &struct {
+            A, B struct {
+                C int
+            }
+        }{struct{ C int }{1}, struct{ C int }{1}}},
+    {"a: &a [1, 2]\nb: *a", &struct{ B []int }{[]int{1, 2}}},
 }
 
 
@@ -133,9 +150,11 @@
     }
 }
 
-var unmarshalErrorTests = []struct{data, error string}{
+var unmarshalErrorTests = []struct {
+    data, error string
+}{
     {"v: !!float 'error'",
-     "YAML error: Can't decode !!str 'error' as a !!float"},
+        "YAML error: Can't decode !!str 'error' as a !!float"},
     {"v: [A,", "YAML error: line 1: did not find expected node content"},
     {"v:\n- [A,", "YAML error: line 2: did not find expected node content"},
     {"a: *b\n", "YAML error: Unknown anchor 'b' referenced"},
@@ -150,7 +169,10 @@
     }
 }
 
-var setterTests = []struct{data, tag string; value interface{}}{
+var setterTests = []struct {
+    data, tag string
+    value     interface{}
+}{
     {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}},
     {"_: [1,A]", "!!seq", []interface{}{1, "A"}},
     {"_: 10", "!!int", 10},
@@ -161,7 +183,7 @@
 var setterResult = map[int]bool{}
 
 type typeWithSetter struct {
-    tag string
+    tag   string
     value interface{}
 }
 
@@ -186,7 +208,7 @@
         err := goyaml.Unmarshal([]byte(item.data), obj)
         c.Assert(err, IsNil)
         c.Assert(obj.Field, NotNil,
-                 Bug("Pointer not initialized (%#v)", item.value))
+            Bug("Pointer not initialized (%#v)", item.value))
         c.Assert(obj.Field.tag, Equals, item.tag)
         c.Assert(obj.Field.value, Equals, item.value)
     }
diff --git a/encode.go b/encode.go
index 3f9a6ce..8233eb7 100644
--- a/encode.go
+++ b/encode.go
@@ -12,11 +12,11 @@
 
 type encoder struct {
     emitter C.yaml_emitter_t
-    event C.yaml_event_t
-    out []byte
-    tmp []byte
-    tmph *reflect.SliceHeader
-    flow bool
+    event   C.yaml_event_t
+    out     []byte
+    tmp     []byte
+    tmph    *reflect.SliceHeader
+    flow    bool
 }
 
 
@@ -59,8 +59,8 @@
 func (e *encoder) emit() {
     // This will internally delete the e.event value.
     if C.yaml_emitter_emit(&e.emitter, &e.event) == 0 &&
-       e.event._type != C.YAML_DOCUMENT_END_EVENT &&
-       e.event._type != C.YAML_STREAM_END_EVENT {
+        e.event._type != C.YAML_DOCUMENT_END_EVENT &&
+        e.event._type != C.YAML_STREAM_END_EVENT {
         if e.emitter.error == C.YAML_EMITTER_ERROR {
             // XXX TESTME
             panic("YAML emitter error: " + C.GoString(e.emitter.problem))
@@ -168,7 +168,7 @@
         cstyle = C.YAML_FLOW_MAPPING_STYLE
     }
     C.yaml_mapping_start_event_initialize(&e.event, nil, ctag, cimplicit,
-                                          cstyle)
+        cstyle)
     e.emit()
     f()
     C.yaml_mapping_end_event_initialize(&e.event)
@@ -193,7 +193,7 @@
         cstyle = C.YAML_FLOW_SEQUENCE_STYLE
     }
     C.yaml_sequence_start_event_initialize(&e.event, nil, ctag, cimplicit,
-                                           cstyle)
+        cstyle)
     e.emit()
     n := in.Len()
     for i := 0; i < n; i++ {
@@ -238,9 +238,12 @@
     // FIXME: Handle 64 bits here.
     s := strconv.Ftoa32(float32(in.Get()), 'g', -1)
     switch s {
-    case "+Inf": s = ".inf"
-    case "-Inf": s = "-.inf"
-    case "NaN": s = ".nan"
+    case "+Inf":
+        s = ".inf"
+    case "-Inf":
+        s = "-.inf"
+    case "NaN":
+        s = ".nan"
     }
     e.emitScalar(s, "", tag, C.YAML_PLAIN_SCALAR_STYLE)
 }
@@ -250,7 +253,7 @@
 }
 
 func (e *encoder) emitScalar(value, anchor, tag string,
-                             style C.yaml_scalar_style_t) {
+style C.yaml_scalar_style_t) {
     var canchor, ctag, cvalue *C.yaml_char_t
     var cimplicit C.int
     var free func()
@@ -270,7 +273,7 @@
     defer free()
     size := C.int(len(value))
     if C.yaml_scalar_event_initialize(&e.event, canchor, ctag, cvalue, size,
-                                      cimplicit, cimplicit, style) == 0 {
+        cimplicit, cimplicit, style) == 0 {
         e.fail("")
     }
     e.emit()
diff --git a/encode_test.go b/encode_test.go
index 1c3d85c..2a8ceb1 100644
--- a/encode_test.go
+++ b/encode_test.go
@@ -2,7 +2,7 @@
 
 
 import (
-    . "gocheck"
+    .   "gocheck"
     "goyaml"
     "math"
     //"reflect"
@@ -10,7 +10,10 @@
 
 var marshalIntTest = 123
 
-var marshalTests = []struct{data string; value interface{}}{
+var marshalTests = []struct {
+    data  string
+    value interface{}
+}{
     {"{}\n", &struct{}{}},
     {"v: hi\n", map[string]string{"v": "hi"}},
     {"v: hi\n", map[string]interface{}{"v": "hi"}},
@@ -36,31 +39,59 @@
     {"v:\n- A\n- B\n", map[string][]string{"v": []string{"A", "B"}}},
     {"v:\n- A\n- 1\n", map[string][]interface{}{"v": []interface{}{"A", 1}}},
     {"a:\n  b: c\n",
-     map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},
+        map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},
 
     // Simple values.
     {"123\n", &marshalIntTest},
 
     // Structures
-    {"hello: world\n", &struct{Hello string}{"world"}},
-    {"a:\n  b: c\n", &struct{A struct{B string}}{struct{B string}{"c"}}},
-    {"a:\n  b: c\n", &struct{A *struct{B string}}{&struct{B string}{"c"}}},
-    {"a: null\n", &struct{A *struct{B string}}{}},
-    {"a: 1\n", &struct{A int}{1}},
-    {"a:\n- 1\n- 2\n", &struct{A []int}{[]int{1, 2}}},
-    {"a: 1\n", &struct{B int "a"}{1}},
-    {"a: true\n", &struct{A bool}{true}},
+    {"hello: world\n", &struct{ Hello string }{"world"}},
+    {"a:\n  b: c\n", &struct {
+        A struct {
+            B string
+        }
+    }{struct{ B string }{"c"}}},
+    {"a:\n  b: c\n", &struct {
+        A *struct {
+            B string
+        }
+    }{&struct{ B string }{"c"}}},
+    {"a: null\n", &struct {
+        A *struct {
+            B string
+        }
+    }{}},
+    {"a: 1\n", &struct{ A int }{1}},
+    {"a:\n- 1\n- 2\n", &struct{ A []int }{[]int{1, 2}}},
+    {"a: 1\n", &struct {
+        B int "a"
+    }{1}},
+    {"a: true\n", &struct{ A bool }{true}},
 
     // Conditional flag
-    {"a: 1\n", &struct{A int "a/c"; B int "b/c"}{1, 0}},
-    {"{}\n", &struct{A int "a/c"; B int "b/c"}{0, 0}},
+    {"a: 1\n", &struct {
+        A   int "a/c"
+        B   int "b/c"
+    }{1, 0}},
+    {"{}\n", &struct {
+        A   int "a/c"
+        B   int "b/c"
+    }{0, 0}},
 
     // Flow flag
-    {"a: [1, 2]\n", &struct{A []int "a/f"}{[]int{1, 2}}},
+    {"a: [1, 2]\n", &struct {
+        A []int "a/f"
+    }{[]int{1, 2}}},
     {"a: {b: c}\n",
-     &struct{A map[string]string "a/f"}{map[string]string{"b": "c"}}},
+        &struct {
+            A map[string]string "a/f"
+        }{map[string]string{"b": "c"}}},
     {"a: {b: c}\n",
-     &struct{A struct{B string} "a/f"}{struct{B string}{"c"}}},
+        &struct {
+            A struct {
+                B string
+            } "a/f"
+        }{struct{ B string }{"c"}}},
 }
 
 
@@ -84,9 +115,12 @@
 //    }
 //}
 
-var marshalTaggedIfaceTest interface{} = &struct{A string}{"B"}
+var marshalTaggedIfaceTest interface{} = &struct{ A string }{"B"}
 
-var getterTests = []struct{data, tag string; value interface{}}{
+var getterTests = []struct {
+    data, tag string
+    value     interface{}
+}{
     {"_:\n  hi: there\n", "", map[interface{}]interface{}{"hi": "there"}},
     {"_:\n- 1\n- A\n", "", []interface{}{1, "A"}},
     {"_: 10\n", "", 10},
@@ -104,7 +138,7 @@
 }
 
 type typeWithGetter struct {
-    tag string
+    tag   string
     value interface{}
 }
 
diff --git a/goyaml.go b/goyaml.go
index fc1219c..60d578e 100644
--- a/goyaml.go
+++ b/goyaml.go
@@ -130,15 +130,15 @@
 // The code in this section was copied from gobson.
 
 type structFields struct {
-    Map map[string]fieldInfo
+    Map  map[string]fieldInfo
     List []fieldInfo
 }
 
 type fieldInfo struct {
-    Key string
-    Num int
+    Key         string
+    Num         int
     Conditional bool
-    Flow bool
+    Flow        bool
 }
 
 var fieldMap = make(map[string]*structFields)
diff --git a/resolve.go b/resolve.go
index 9af47c9..45e6955 100644
--- a/resolve.go
+++ b/resolve.go
@@ -12,7 +12,7 @@
 
 type resolveMapItem struct {
     value interface{}
-    tag string
+    tag   string
 }
 
 var resolveTable = make([]byte, 256)
@@ -32,7 +32,11 @@
     t[int('.')] = '.' // Float (potentially in map)
     t[int('<')] = '<' // Merge
 
-    var resolveMapList = []struct{v interface{}; tag string; l []string} {
+    var resolveMapList = []struct {
+        v   interface{}
+        tag string
+        l   []string
+    }{
         {true, "!!bool", []string{"y", "Y", "yes", "Yes", "YES"}},
         {true, "!!bool", []string{"true", "True", "TRUE"}},
         {true, "!!bool", []string{"on", "On", "ON"}},
@@ -104,7 +108,7 @@
 
     case '.':
         // Not in the map, so maybe a normal float.
-        floatv, err := strconv.Atof(in)
+        floatv, err := strconv.Atof64(in)
         if err == nil {
             return "!!float", floatv
         }
@@ -126,7 +130,7 @@
                 return "!!int", intv
             }
         }
-        floatv, err := strconv.Atof(in)
+        floatv, err := strconv.Atof64(in)
         if err == nil {
             return "!!float", floatv
         }
@@ -148,7 +152,7 @@
 
     default:
         panic("resolveTable item not yet handled: " +
-              string([]byte{c}) + " (with " + in +")")
+            string([]byte{c}) + " (with " + in + ")")
     }
     return "!!str", in
 }
diff --git a/suite_test.go b/suite_test.go
index fbb8919..be26fc2 100644
--- a/suite_test.go
+++ b/suite_test.go
@@ -2,7 +2,7 @@
 
 
 import (
-    . "gocheck"
+    .   "gocheck"
     "testing"
 )
 
