Soweit mir derzeit bekannt ist, gibt es bei go keine Methode zum Verketten von Zeichenfolgen / Bytes zu einer resultierenden Zeichenfolge, ohne mindestens / zwei / Kopien zu erstellen.
Sie müssen derzeit ein [] Byte vergrößern, da alle Zeichenfolgenwerte const sind. DANN müssen Sie die integrierte Zeichenfolge verwenden, damit die Sprache ein 'gesegnetes' Zeichenfolgenobjekt erstellt, für das der Puffer kopiert wird, da irgendwo irgendwo eine Referenz vorhanden sein könnte an die Adresse, die das Byte [] unterstützt.
Wenn ein [] Byte geeignet ist, können Sie einen sehr geringen Vorsprung gegenüber den Bytes erzielen. Verbinden Sie die Funktion, indem Sie eine Zuordnung vornehmen und die Kopie selbst aufrufen.
package main
import (
"fmt"
)
func main() {
m := make(map[int]string)
m[1] = "a" ; m[2] = "b" ; m[3] = "c" ; m[4] = "d"
ip := 0
/* If the elements of m are not all of fixed length you must use a method like this;
* in that case also consider:
* bytes.Join() and/or
* strings.Join()
* They are likely preferable for maintainability over small performance change.
for _, v := range m {
ip += len(v)
}
*/
ip = len(m) * 1 // length of elements in m
r := make([]byte, ip, ip)
ip = 0
for _, v := range m {
ip += copy(r[ip:], v)
}
// r (return value) is currently a []byte, it mostly differs from 'string'
// in that it can be grown and has a different default fmt method.
fmt.Printf("%s\n", r)
}