     st)
   "Syntax table for Go mode.")
 
+(defvar go-mode-keywords
+  '("break"    "default"     "func"   "interface" "select"
+    "case"     "defer"       "go"     "map"       "struct"
+    "chan"     "else"        "goto"   "package"   "switch"
+    "const"    "fallthrough" "if"     "range"     "type"
+    "continue" "for"         "import" "return"    "var")
+  "All keywords in the Go language.  Used for font locking and
+some syntax analysis.")
+
 (defvar go-mode-font-lock-keywords
-  (let ((keywords '("import" "package"
-                    "var" "const" "type" "func"
-                    "struct" "interface"
-                    "chan" "map"
-                    "if" "else" "for" "switch" "select"
-                    "range" "case" "default"
-                    "return" "continue" "break" "fallthrough" "goto"
-                    "go" "defer"))
-        (builtins '("cap" "close" "closed" "len" "make" "new"
+  (let ((builtins '("cap" "close" "closed" "len" "make" "new"
                     "panic" "panicln" "print" "println"))
         (constants '("nil" "true" "false" "iota"))
         (type-name "\\s *\\(?:[*(]\\s *\\)*\\(?:\\w+\\s *\\.\\s *\\)?\\(\\w+\\)")
         )
-    `((,(regexp-opt keywords 'words) . font-lock-keyword-face)
+    `((,(regexp-opt go-mode-keywords 'words) . font-lock-keyword-face)
       (,(regexp-opt builtins 'words) . font-lock-builtin-face)
       (,(regexp-opt constants 'words) . font-lock-constant-face)
       ;; Function names in declarations

                     (and depth
                          (not (eq (char-after (caar depth)) ?\{)))))
                  (t
                   ;; Except when the current line closes the previous line's 
                   ;; scope, anything else is a continuation line.
                   (not current-line-closes-scope)))
            (incf indent tab-width))
          (max indent 0)))))))

(defun go-mode-indent-line ()

        ;; Inside a multi-line string.  Don't mess with indentation.
        nil)
       (cs
        ;; Inside a general comment
        (goto-char (car cs))
        (forward-char 1)
        (current-column))
       (t
        ;; Not in a multi-line string or comment
        (let ((indent 0)
              (inside-indenting-paren nil))
          ;; Count every enclosing brace, plus parens that follow
          ;; import, const, var, or type and indent according to
          ;; depth.  This simple rule does quite well, but also has a
