简体   繁体   中英

How do i recover the struct type after make it as Interface in Golang

I want to merge some similar func code to one func, but every old func is use different type of struct, so i intend to create the model by different string of type. SO i do something like this:

type A struct {
   filed string
}
type B struct {
   filed string
}
and still C, D, E, F here...(every struct has its own method different with others)

and i want create those type in one place:

create(typeName string) interface {
   switch typeName {
   case A:
       return &A{}
   case B:
       return &B{}
   ....(more case than 10 times)
   }
}

Then i use the create() here:

model := create("A")

now, model is type of interface, and no A`s fileds, how would simply to recover the type of model to A

Here is a sample of how you can use type assertion to convert interfaces to underlying structs

Here e is of the struct type and hence you can access any of its fields or struct methods.

package main

import (
    "fmt"
)

type A struct {
    AF int
}

type B struct {
    BF string
}

func main() {
    ds := []interface{}{
        A{1},
        B{"foo"},
    }

    for _, d := range ds {
        switch e := d.(type) {
        case A:
            fmt.Println(e.AF)
        case B:
            fmt.Println(e.BF)
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM