How can I implement different functions using the same interface in golang


I have defined an interface named session, and I have SessionA and SessionB like this

type Session interface {
type SessionA struct {
    jobs string

type SessionB struct {
    foods string

func (sessionA *SessionA) StartSession() {
    fmt.Printf("begin to do %s\n",

func (sessionB *SessionB) StartSession() {
    fmt.Printf("begin to eat %s\n", sessionB.foods)

In my main function I want to define a parameter which can call StartSession automatically

func main() {
    sessionType := 1 // maybe 2, just example
    var s interface{}
    if sessionType == 1 {
        s = SessionA{}
    } else {
        s = SessionB{}

but I get this s.StartSession() type interface {} is interface with no methods, my question is how can I use same variable to call different StartSession()


Two fixes are needed:

  • To call an interface method on some variable, declare the variable as the interface type.
  • The pointer receiver implements the method. Assign pointers to the interface variable.

Here’s the code:

var s Session        // Declare variable as Session so we can call StarSession
if sessionType == 1 {
    s = &SessionA{}  // note & on this line
} else {
    s = &SessionB{}  // note & on this line

Answered By – user19129216

Answer Checked By – Katrina (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.