Función reflect.MakeSlice() en Golang con ejemplos

El lenguaje Go proporciona una implementación de soporte incorporada de reflexión en tiempo de ejecución y permite que un programa manipule objetos con tipos arbitrarios con la ayuda del paquete reflect. La función reflect.MakeSlice() en Golang se usa para crear un nuevo valor de segmento inicializado en cero para el especificado tipo de corte, longitud y capacidad. Para acceder a esta función, es necesario importar el paquete reflect en el programa.

Sintaxis:

func MakeSlice(typ Type, len, cap int) Value

Parámetros: Esta función toma los siguientes parámetros:

  • typ : Este parámetro es el Tipo.
  • len: Este parámetro es el número de elementos.
  • cap: Este parámetro es la capacidad od slice.

Valor devuelto: esta función devuelve un segmento recién creado.

Los siguientes ejemplos ilustran el uso del método anterior en Golang:

Ejemplo 1:

// Golang program to illustrate
// reflect.MakeMapWithSize() Function
     
package main
     
import (
    "fmt"
    "reflect"
)
    
// Main function
func main() {
       
    var str []string 
       
    var strValue reflect.Value = reflect.ValueOf(&str)
   
    indirectStr := reflect.Indirect(strValue)
   
    valueSlice := reflect.MakeSlice(indirectStr.Type(), 100, 1024) 
       
    kind := valueSlice.Kind()
   
    cap := valueSlice.Cap()
   
    length := valueSlice.Len()
   
    fmt.Printf("Type is [%v] with capacity of %v bytes"+
              " and length of %v .", kind, cap, length)
   
    
}

Producción:

Type is [slice] with capacity of 1024 bytes and length of 100 .

Ejemplo 2:

// Golang program to illustrate
// reflect.MakeMapWithSize() Function
    
package main
    
import (
    "fmt"
    "reflect"
)
   
// Main function
func main() {
       
    intSlice := make([]int, 0)
    mapStringInt := make(map[string]int)
   
    sliceType := reflect.TypeOf(intSlice)
    mapType := reflect.TypeOf(mapStringInt)
  
    //use of MakeSlice() method
    intSliceReflect := reflect.MakeSlice(sliceType, 0, 0)
    mapReflect := reflect.MakeMap(mapType)
   
    v := 100
    rv := reflect.ValueOf(v)
    intSliceReflect = reflect.Append(intSliceReflect, rv)
    intSlice2 := intSliceReflect.Interface().([]int)
    fmt.Println(intSlice2)
   
    k := "GeeksforGeeks"
    rk := reflect.ValueOf(k)
    mapReflect.SetMapIndex(rk, rv)
    mapStringInt2 := mapReflect.Interface().(map[string]int)
    fmt.Println(mapStringInt2)
   
}

Producción:

[100]
map[GeeksforGeeks:100]

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *