 (defun go-goto-beginning-of-string-or-comment ()
   (goto-char (nth 8 (syntax-ppss))))
 
-(defun go--backward-irrelevant ()
+(defun go--backward-irrelevant (&optional stop-at-string)
   (let (pos (start-pos (point)))
     (skip-chars-backward "\n[:blank:]")
-    (if (save-excursion (beginning-of-line) (go-in-string-p))
-        (if (looking-back "`")
-            (backward-char)))
-    (if (go-in-string-p)
+    (if (and (save-excursion (beginning-of-line) (go-in-string-p)) (looking-back "`") (not stop-at-string))
+        (backward-char))
+    (if (and (go-in-string-p) (not stop-at-string))
         (go-goto-beginning-of-string-or-comment))
     (if (looking-back "\\*/")
         (backward-char))

                    (- (current-indentation) tab-width)
                  (current-indentation)))
            (progn
              (go--backward-irrelevant)
              (if (looking-back go-dangling-operators-regexp)
                  ;; only one nesting for all dangling operators in one operation
                  (if (go-previous-line-has-dangling-op-p)
                      (current-indentation)
                    (+ (current-indentation) tab-width))
                (progn
                  (if (go-previous-line-has-dangling-op-p)
                      (setq outindent tab-width))
                  (setq line-begin (line-beginning-position))

               (end-of-line))
      (goto-char pos))
    (if (/= start-pos (point))
        (go--backward-irrelevant stop-at-string))
    (/= start-pos (point))))

(defun go-previous-line-has-dangling-op-p ()
  (save-excursion
    (beginning-of-line)
    (go--backward-irrelevant t)
    (looking-back go-dangling-operators-regexp)))

(defun go-indentation-at-point (point)
