Refleksi: Ini adalah kemampuan program untuk melakukan introspeksi dan menganalisis strukturnya selama runtime. Atau kita dapat mengatakan bahwa ini adalah sekumpulan fungsi yang digunakan untuk mengekstrak data tentang suatu variabel selama run time. Kita bisa mendapatkan informasi tipe dan nilai selama runtime. Ini mengimplementasikan refleksi dengan paket refleksi yang menyediakan tipe dan metode untuk memeriksa bagian struktur antarmuka dan bahkan mengubah nilai pada waktu proses.

Pertama kita perlu mengimpor paket refleksi.

import "reflect"

Tipe reflect.Type dan reflect.Value menyediakan metode untuk mengakses bagian antarmuka. Tipe berfokus pada data tentang tipe dan nilai berfokus pada data tentang nilai. Metode Jenis berfokus pada representasi tipe dari suatu tipe.

t := reflect.TypeOf(s)
v := reflect.ValueOf(s)
k := t.Kind()

Berikut adalah kode lengkapnya, mengambil contoh Bentuk, Persegi Panjang dan Lingkaran dari bagian (Antarmuka) sebelumnya.

package main

import (
   "fmt"
   "math"
   "reflect"
)

type Shape interface {
    area() float64
    perimeter() float64
}

type Rectangle struct {
    length, width float64
}

type Circle struct {
    radius float64
}

func (r Rectangle) area() float64 {
    return r.length * r.width
}

func (c Circle) area() float64 {
    return math.Pi * c.radius * c.radius
}

func (r Rectangle) perimeter() float64 {
    return 2 * (r.length + r.width)
}

func (c Circle) perimeter() float64 {
    return 2 * math.Pi * c.radius
}

func details(s Shape) {
   t := reflect.TypeOf(s)
   v := reflect.ValueOf(s)
   k := t.Kind()
   fmt.Println("type: ", t, " vlaue: ", v, " kind: ", k)
}

func main() {
   var s Shape
   s = Rectangle{length: 12.2, width: 8.7}
   details(s)
   s = Circle{radius: 2.4}
   details(s)
}

Outputnya adalah

type: main.Rectangle vlaue: {12.2 8.7} kind: struct
type: main.Circle vlaue: {2.4} kind: struct