Effizientes Anhängen an einen String-Container variabler Länge (Golang)

Das Problem:

Ich muss auf jede Zeile einer großen Protokolldatei (mit einer Länge von mehreren GB) mehrere reguläre Ausdrücke anwenden, nicht leere Übereinstimmungen sammeln und sie alle in einem Array ablegen (zur Serialisierung und zum Senden über das Netzwerk).

Scheiben sind keine große Hilfe, wenn Antwort aufdiese Frage hält:

Wenn die Kapazität des Slice nicht ausreicht, muss beim Anhängen neuer Speicher zugewiesen und der alte kopiert werden. Bei Slices mit <1024 Elementen wird die Kapazität verdoppelt, bei Slices mit> 1024 Elementen um den Faktor 1,25 erhöht.

Da es buchstäblich Hunderttausende von Regex-Übereinstimmungen geben kann, kann ich die Länge / Kapazität eines Slice nicht wirklich vorhersagen. Ich kann es auch nicht zu groß machen, "nur für den Fall", dass dies Speicher verschwendet (oder? Wenn die Speicherzuordnung klug genug ist, nicht zu viel Speicher zuzuweisen, in den nicht geschrieben wird, könnte ich möglicherweise eine große Slice-Kapazität verwenden ohne viel schaden?).

Also denke ich über folgende Alternative nach:

eine doppelt verknüpfte Liste von Übereinstimmungen haben (http://golang.org/pkg/container/list/)berechnet seine Längelen() Arbeit?)Weisen Sie einen Teil dieser Kapazität vorab zuKopieren Sie String-Zeiger in dieses Slice

Gibt es eine weniger mühsame Methode, um dieses Ziel in Go zu erreichen (mit ~ O (1) Komplexität anhängen)?

(Golang Neuling hier natürlich)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage