2015-07-17 2 views
0

Я рассматриваю написание шаблона Пойти генератор кода и удивление:Go Язык: дублирующиеся константы сборник

Если у меня есть много строковых констант и/или переменных с одинаковыми значениями они будут храниться в исполняемом файле несколько раз или компилятор сделает оптимизацию и сохранит только один экземпляр за один дубликат и направит его туда, где это необходимо?

E.g.

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

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

Будет ли это влиять на размер файла, если у меня есть несколько файлов с одинаковыми константами или компилятором, достаточно умный, чтобы сделать оптимизацию?

Представьте себе, что во многих шаблонах меня Somthing как:

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]) 
} 

ответ

2

Спецификация языка ничего не говорит о внутреннем хранении строковых констант или литералов. Основываясь на этом обсуждении, я бы предположил, что в настоящее время нет интернирования на этом языке; https://github.com/golang/go/issues/5160, хотя это немного датировано сейчас.

Тот же поиск показал этот проект, который может оказаться полезным; https://gist.github.com/karlseguin/6570372

Смежные вопросы