gpt4 book ai didi

Go语言: duplicate string constants compilation

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:54 25 4
gpt4 key购买 nike

我正在考虑为 Go 代码生成器编写一个模板并想知道:

如果我有许多具有相同值的字符串常量和/或变量,它们会被多次存储在一个可执行文件中,还是编译器会进行优化,每个副本只存储 1 个实例并在需要的地方引用它?

例如

File1.go
========
s1 := "some_string_1"
s2 := "some_string_2"

FileN.go
========
a1 := "some_string_1"
a1 := "some_string_2"

如果我有多个具有相同常量的文件或编译器足够智能以进行优化,它会影响文件大小吗?

想象一下,在许多模板中我都有类似的东西:

Template 1
==========
{% for a in list1 %}<td>{{a}}</td>{% endfor %}

Tempalte 2
==========
{% for b in list2 %}<td>{{b.c}}</td><td>{{b.d}}</td>{% endfor %}

这将被翻译成类似的东西:

for i, a := range list {
write("<td>")
write(a)
write("</td>")
}

for i, b := range list2 {
write("<td>")
write(b.c)
write("</td></td>")
write(b.d)
write("</td>")
}

显然是 <td> & </td>会在代码中重复多次。那么创建一个全局字符串数组并从中获取值是否有意义?像这样的东西:

myStrings := [...]string{
"<td>",
"</td>"
}
for i, a := range list {
write(myStrings[0])
write(a)
write(myStrings[1])
}

最佳答案

语言规范没有说明字符串常量或文字的内部存储。基于这个讨论,我假设目前没有实习语言; https://github.com/golang/go/issues/5160虽然现在有点过时了。

同样的搜索找到了这个项目,您可能会发现它有帮助; https://gist.github.com/karlseguin/6570372

关于Go语言: duplicate string constants compilation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com