是否可以从 golang 结构返回 javascript 函数?

     2023-02-18     116

关键词:

【中文标题】是否可以从 golang 结构返回 javascript 函数?【英文标题】:Is it posible to return javascript function from golang struct? 【发布时间】:2022-01-19 00:28:42 【问题描述】:

下面的例子是一个 golang 结构

type Column struct 
        Data            string      `json:"data"`
        Title           string      `json:"title"`
        Type            string      `json:"type"`
        Class           string      `json:"class"`
        Visible         bool        `json:"visible"`
        Render          template.JS `json:"render"`


func (c *Column) SetValue() 
        // code below is flexible depend on condition but here i keep it simple.
        c.Render = template.JS(`function(data, type, row)  if(type === 'display') return $.fn.dataTable.render.text().display(data); return data;`);

这里是 golang 模板中的 Javascript

<script>
    $(function () 
        console.log(.Columns, wantedobj);
    );
</script>

这里是 chrome 开发者工具。

左列表是来自上述结构的格式值。 正确的列表是我想要的格式。

关于 render 是否有任何可能的方法来获取 javascript 函数而不是字符串? (请看右图的渲染

【问题讨论】:

【参考方案1】:

使用template.JS 是正确的。您的问题是,在 HTML 模板中,值是根据 contexts 转义的:

在解析时,每个 . 都会被覆盖以根据需要添加转义函数。

&lt;script&gt; 标签内,.Columns 等结构值被渲染为 JSON。现在,由于template.JS 只是在string 上定义的类型,所以当您将Columns 编组为JSON 时,Render 字段将保留其字符串表示形式。

如果您直接打印Render,它将显示为未引用的Javascript:

console.log(.Columns.Render); // unescaped JS function

现在您可能会考虑在Columns 上实现MarshalJSON 以将Render 呈现为未转义的Javascript,但这将不再是有效的JSON。函数不是 JSON 数据类型。它只能是一个字符串。一种选择是改用 text/template 包,但它不会再逃避 anything 了。或者使用单个字段构造 Javascript 对象:

<script>
    $(function () 
        const foo = 
            data: .Columns.Data,
            render: .Columns.Render
        
        console.log(foo);
    );
</script>

【讨论】:

这是一个很好的答案,但我建议不要使用模板将数据传递给 JavaScript,NightOwl。很难正确地进行转义,也很难调试。我更喜欢编写静态 javascript 并使用 API 调用从后端提取数据。

golang对特定域名根据内网域名是否可以访问返回特定的ip(代码片段)

查看详情

golang入门到项目实战golang方法

...语言没有面向对象的特性,也没有类对象的概念。但是,可以使用结构体来模拟这些特性,我们都知道面向对象里面有类方法等概念。我们也可以声明一些方法,属于某个结构体。Go中的方法,是一种特殊的函数,定义域struct之... 查看详情

我可以从函数返回一个通用结构吗?

】我可以从函数返回一个通用结构吗?【英文标题】:Canireturnagenericstructfromfunction?【发布时间】:2021-10-1818:11:09【问题描述】:很抱歉,如果下面的答案是直截了当的,但我似乎无法理解。我需要创建一个swarm并将swarm返回到主... 查看详情

golang并发函数怎么返回

...生notenoughargumentstoreturnerror.编译错误。在函数定义时,也可以声明返回值的名字,这一部分在之后会介绍,其定义结构类似如下所示:funcSumProdDiff(i,jint)(sint,pint,dint)本回答被提问者采纳 查看详情

我可以从定义结构的函数返回结构 a 吗? (C)

】我可以从定义结构的函数返回结构a吗?(C)【英文标题】:CanIreturnastructafromafunctionthatthestructisdefinedin?(c)【发布时间】:2021-10-1511:15:33【问题描述】:我试图在函数内部定义一个结构并在函数末尾返回该结构,但无法找出正... 查看详情

golang之反射

反射基本介绍  1)反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind)  2)如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段,方法)  3)通过反射,可以修改变量... 查看详情

golang入门到项目实战golang结构体指针

...下普通变量的指针,例如:运行结果实例运行结果我们还可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址,例如:运行结果从运行结果,我们发现p_person为指针类型访问结构体指针成员,也使用点运算符(.)... 查看详情

是否可以使用 emscripten 使用 Javascript 从 C++ 打印字符串?

】是否可以使用emscripten使用Javascript从C++打印字符串?【英文标题】:IsitpossibletoprintastringfromC++withJavascriptusingemscripten?【发布时间】:2013-07-0417:28:35【问题描述】:如何使用emscripten将char*或std::string传递给外部定义的Javascript函数... 查看详情

golang中的构造函数(代码片段)

...化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果。因为struct是值类型,如果结构体比较复杂的话,值拷贝性能开销会比较大,所以该构造函数返回... 查看详情

是否可以从 PHP 中的闭包返回引用?

】是否可以从PHP中的闭包返回引用?【英文标题】:IsitpossibletoreturnareferencefromaclosureinPHP?【发布时间】:2013-07-0406:45:49【问题描述】:为了从PHP中的函数返回引用,必须:...使用引用运算符&in函数声明和将返回值分配给一个... 查看详情

是否可以在 golang 中使用自定义库触发编译时错误?

】是否可以在golang中使用自定义库触发编译时错误?【英文标题】:Isitpossibletotriggercompiletimeerrorwithcustomlibraryingolang?【发布时间】:2016-09-1305:39:57【问题描述】:假设,我有min()(仅作为示例)一个可变参数函数,用于从提供的... 查看详情

是否可以在 golang 中使用自定义库触发编译时错误?

】是否可以在golang中使用自定义库触发编译时错误?【英文标题】:Isitpossibletotriggercompiletimeerrorwithcustomlibraryingolang?【发布时间】:2016-09-1305:39:57【问题描述】:假设,我有min()(仅作为示例)一个可变参数函数,用于从提供的... 查看详情

golang指针和结构体

...个指针变量fmt.scan()就是传入一个指针变量。两种方法都可以使用。以上简要介绍了go语言中的指针和结构体。 查看详情

是否可以通过 ajax 从 php 返回 javascript 函数?

】是否可以通过ajax从php返回javascript函数?【英文标题】:Isitpossibletoreturnjavascriptfunctionviaajaxfromphp?【发布时间】:2018-04-0408:04:31【问题描述】:是否可以通过Ajax从php返回javascript函数?通常我只会返回一个值,然后决定用普通的... 查看详情

是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?

】是否可以编写返回文本视图HStack的func、方法、结构、扩展、类?【英文标题】:Isitpossibletowriteafunc,method,struct,extension,classthatreturnsaHStackofTextViews?【发布时间】:2020-08-2400:06:43【问题描述】:我想说我需要一个包含大量文本视... 查看详情

golang从map获取值时的值拷贝问题

...不确定这个值和map中的值是什么关系,如果不小心修改,是否会造成map值变更。我们希望golang中更多的是值传递,这样能避免数据存储在堆上,造成gc负担。可以看到,修改值后,map中的值保持不变。说明map获取的值也是值传递... 查看详情

在 golang 中,是不是可以从类型本身获取 reflect.Type,从名称作为字符串?

...possibletogetreflect.Typefromthetypeitself,fromnameasstring?在golang中,是否可以从类型本身获取reflect.Type,从名称作为字符串?【发布时间】:2011-09-1710:46:31【问题描述】:typet1structiint;sstri 查看详情

是否有任何 API 可以从 Java 源文件生成包结构

】是否有任何API可以从Java源文件生成包结构【英文标题】:IsthereanyAPItogeneratepackagestructurefromJavasourcefiles【发布时间】:2012-01-0911:24:41【问题描述】:我有一个包含Java源文件的源文件夹。这些Java文件有不同的包。使用javac命令我... 查看详情