Adición eficiente a un contenedor de longitud variable de cadenas (Golang)

El problema:

Necesito aplicar múltiples expresiones regulares a cada línea de un archivo de registro grande (como varios GB de largo), reunir coincidencias no vacías y colocarlas todas en una matriz (para serializar y enviarlas a través de la red).

Las rebanadas no son de mucha ayuda si respondes aesta pregunta sostiene:

Si la división no tiene suficiente capacidad, la aplicación deberá asignar una nueva memoria y copiar la anterior. Para las rebanadas con <1024 elementos, duplicará la capacidad, para las rebanadas con> 1024 elementos, la aumentará en un factor 1.25.

Como literalmente puede haber cientos de miles de coincidencias de expresiones regulares, realmente no puedo predecir la longitud / capacidad de una porción. No puedo hacerlo demasiado grande "por si acaso" porque esto desperdiciará memoria (o lo hará si el asignador de memoria es lo suficientemente inteligente como para no asignar demasiada memoria en la que no está escrito, tal vez podría usar una gran capacidad de división) sin mucho daño?).

Así que estoy pensando en seguir la alternativa:

tener una lista de partidos doblemente enlazada (http://golang.org/pkg/container/list/)calcule su longitudlen() ¿trabajo?)preasignar una porción de esta capacidadCopiar punteros de cadena a esta porción

¿Hay una manera menos laboriosa de lograr este objetivo en Go (adjuntar con ~ O (1) añadir complejidad)?

(Golang novato aquí, por supuesto)

Respuestas a la pregunta(2)

Su respuesta a la pregunta