 will be marked from the beginning up to this point (that is, up
 to and including character (1- go-mode-mark-cs-end)).")
 (make-variable-buffer-local 'go-mode-mark-cs-end)
+
+(defvar go-mode-mark-string-end 1
+  "The point at which the string cache ends.  The buffer
+will be marked from the beginning up to this point (that is, up
+to and including character (1- go-mode-mark-string-end)).")
+(make-variable-buffer-local 'go-mode-mark-string-end)
+
+(defvar go-mode-mark-comment-end 1
+  "The point at which the comment cache ends.  The buffer
+will be marked from the beginning up to this point (that is, up
+to and including character (1- go-mode-mark-comment-end)).")
+(make-variable-buffer-local 'go-mode-mark-comment-end)
 
 (defvar go-mode-mark-nesting-end 1
   "The point at which the nesting cache ends.  The buffer will be

  "Indent the current line according to `go-mode-indentation'."
  (interactive)

  (let ((col (go-mode-indentation)))
    (when col
      (let ((offset (- (current-column) (current-indentation))))
        (indent-line-to col)
        (when (> offset 0)
          (forward-char offset))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Go mode

          (when (looking-at "\\<case\\>\\|\\<default\\>\\|\\w+\\s *:\\(\\S.\\|$\\)")
            (decf indent tab-width))

	  (when (looking-at "\\w+\\s *:.+,\\s *$")
	    (incf indent tab-width))

          ;; Continuation lines are indented 1 level
          (beginning-of-line)		; back up to end of previous line
	  (backward-char)
          (go-mode-backward-skip-comments) ; back up past any comments
          (when (case (char-before)
                  ((nil ?\{ ?:)
                   ;; At the beginning of a block or the statement
