   (emit-wrap env
     (emits "(func " (munge name) "(")
     (emit-fn-params params)
-    (emits "){")
+    (emits " interface{}){")
     (when type
       (emitln "var self__ = this"))
     (when recurs (emitln "for {"))


               (emitln "var " mname " = func (" (comma-sep
                                                 (if variadic
                                                   (concat (butlast params) ['var_args])
                                                   params)) "){")
               (when type
                 (emitln "var self__ = this"))
               (when variadic
                 (emits "var ")
                 (emit (last params))
                 (emits " = nil")
                 (emitln "if (len(arguments) > " (dec (count params)) ") {")
                 (emits "  ")
                 (emit (last params))
                 (emits " = cljs.core.array_seq(arguments[: " (dec (count params)) "],0);")
                 (emitln "} "))
               (emits "return " delegate-name "(this,")
               (doseq [param params]

      (when loop-locals
        (when (= :return (:context env))
            (emits "return "))
        (emitln "((func (" (comma-sep (map munge loop-locals)) " interface{}){")
        (when-not (= :return (:context env))
            (emits "return ")))
      (if (= 1 (count methods))
