Pregunta

He leído este pero todavía no son plenamente conscientes de la ventaja de slice contra array .Así que estoy esperando a alguien en SO explicar mejor que él y estoy seguro de que puede:)

¿Fue útil?

Solución

Las rebanadas tienen una gran cantidad de usos más arrays, varios de los cuales ya se han mencionado otros carteles.

  • Las rebanadas puede funcionar en muchos aspectos, como punteros.
    • múltiples rebanadas puede "punto" a la misma matriz de base
    • Las rebanadas se pasan por referencia, pero desde una rebanada en sí es un puntero que puede ser utilizado para pasar de "conjuntos" en torno mucho más eficiente ya que no necesita toda la matriz a copiar.
  • Sin embargo, a diferencia de los punteros, rebanadas proporcionan seguridad tampón adicional
    • División subdesborda y desborda excepciones de disparo, en lugar de lo que le permite una capacidad inseguro para acceder a otras áreas de la memoria.
    • Las rebanadas que permiten limitar el acceso sólo a ciertas áreas de una matriz. Esto puede ser extremadamente útil en el trabajo con subconjuntos.
  • La longitud de una rebanada se determina dinámicamente en tiempo de ejecución, a diferencia de las matrices que tienen sus tamaños fijos en tiempo de compilación. También, las rebanadas se pueden redimensionar dinámicamente en tiempo de ejecución.

Otros consejos

En go, matrices se pasan por valor; Por lo tanto, para "pasar por referencia", se utiliza una rebanada. ¡Y eso no es todo! Citando de Go tutorial :

  

El tamaño de la matriz es parte de su   tipo; Sin embargo, se puede declarar una rebanada   variables, a la que se puede asignar una   puntero a cualquier matriz con la misma   tipo de elemento o-mucho más comúnmente una   expresión rebanada de la forma a [bajo:   alta], que representa la submatriz   indexado por bajo a través de alta 1. rebanadas   se parecen mucho a las matrices, pero no tienen   tamaño explícita ([] vs [10]) y   hacer referencia a un segmento de una subyacente,   , Matriz regular menudo anónimo.   Múltiples cortes pueden compartir los datos si   representar piezas de la misma matriz;   varias matrices nunca puede compartir datos.

     

Las divisiones son mucho más comunes en Ir   programas que las matrices regulares; ellos son   más flexible, tener referencia   semántica y son eficientes. Qué   que les falta es el control preciso de   almacenamiento disposición de una matriz regular; Si   usted quiere tener un centenar de elementos de   una matriz almacenada dentro de su estructura,   se debe utilizar una matriz regular.

     

Al pasar una matriz a una función,   casi siempre se quiere declarar las   parámetro formal sea una rebanada. Cuando   se llama a la función, tomar la   dirección de la matriz y Go voluntad   crear (eficiente) una referencia rebanada   y pasar eso.

Creo rodajas y las matrices se describen mucho mejor y con más detalle en este post en el Go Blog.

Además de las respuestas ya dadas, rebanadas puede dimensionarse de forma dinámica mientras que las matrices no pueden ser. Es decir, sólo se puede usar constantes para especificar el tamaño de una matriz, mientras que se puede utilizar una variable para especificar el tamaño de una rebanada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top