             (go--backward-irrelevant)
             (if (= (go-paren-level) 0)
                 0
-              (while (and (not (bobp))
-                          (>= (go-paren-level) start-nesting))
-                (if (= 0 (skip-chars-backward "^[]{}()"))
-                    (backward-char))
-                (if (go-in-string-p)
-                    (go--backward-irrelevant)))
+              (go-goto-opening-parenthesis)
               (if (< (go-paren-level) start-nesting)
                   (progn
                     (if (go-previous-line-has-dangling-op-p)

        (setq start-nesting (go-paren-level))
        (if (looking-at "[])}]")
            (progn
              (while (and (not (bobp))
                          (>= (go-paren-level) start-nesting))
                (skip-chars-backward "^[]{}()")
                (backward-char))
              (if (go-previous-line-has-dangling-op-p)
                  (- (current-indentation) tab-width)
                (current-indentation)))

    (go--backward-irrelevant t)
    (looking-back go-dangling-operators-regexp)))

(defun go-goto-opening-parenthesis ()
  (let ((start-nesting (go-paren-level)))
    (while (and (not (bobp))
                (>= (go-paren-level) start-nesting))
      (if (= 0 (skip-chars-backward "^[{("))
          (if (go-in-string-or-comment-p)
              (go-goto-beginning-of-string-or-comment)
            (backward-char))))))

(defun go-indentation-at-point (point)
  (save-excursion
    (let (start-nesting (outindent 0))
