You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang模板传递字符串至JavaScript函数报错求助

问题根源

你遇到的核心问题是Golang模板渲染后的JS代码存在语法错误,导致浏览器解析JS时失败,进而中断页面渲染出现空白。硬编码'usa'能正常运行是因为它是合法的JS字符串字面量,而直接使用{{.Country.CountryName}}会触发两种常见问题:

  • 缺少字符串引号:如果CountryName是带空格的字符串(比如"United States"),渲染后会变成PressedLetter(United States),JS会把United当作未定义的变量,抛出引用错误。
  • 未转义特殊字符:如果CountryName包含单引号、双引号、反斜杠等JS特殊字符(比如"O'Neil"),直接用'{{.Country.CountryName}}'渲染会导致JS字符串提前闭合,触发语法错误。
解决方法

使用Golang html/template 内置的js函数,它会自动将字符串转义为合法的JS字符串字面量,同时添加正确的引号:

<!-- 正确写法 -->
<button onclick="PressedLetter({{.Country.CountryName | js}})">触发函数</button>

如果使用的是text/template(不自动转义),可以提前在Go代码中把CountryName转成JSON格式的字符串(JSON字符串与JS字符串语法兼容):

// Go代码中预处理
import "encoding/json"

// 将CountryName转为JSON字符串
countryNameJSON, _ := json.Marshal(country.CountryName)
// 将countryNameJSON传入模板上下文

模板中直接使用预处理后的JSON字符串:

<button onclick="PressedLetter({{.CountryNameJSON}})">触发函数</button>
验证方法

渲染后查看页面源代码,确保输出的JS参数是合法的字符串,比如:

  • 正确输出示例:PressedLetter("United States") 或 PressedLetter("O'Neil")
  • 错误输出示例:PressedLetter(United States) 或 PressedLetter('O'Neil')

内容的提问来源于stack exchange,提问作者dhn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:42:09