[Solved] How do I translate this Java interface & inheritence structure to Golang? [closed]


I figured out how to achieve the same thing by myself, even though I enjoyed the “Just learn Go” answers I got.

It’s solved by creating a wrapper function userLoggedInWebEntry that takes in a WebEntryUserLoggedIn function signature, but returns a WebEntry function signature.

It achieves the same thing as the Java inheritance code above, by letting the developer only implement a func( user User ) string and the logic in userLoggedInWebEntry is not duplicated

https://play.golang.org/p/adrk46YFIl8

package main

import (
    "fmt"
)

type ConnectionData string
type SessionData string
type User string

type WebEntry func(connectionData ConnectionData, sessionData SessionData) string
type WebEntryUserLoggedIn func( user User ) string

func main() {
    var webentries []WebEntry
    webentries = append( webentries, userLoggedInWebEntry(SavePasswordWebEntry) )

    // Test the invocation
    fmt.Println( webentries[0]("ConnectionData", "SessionData") )
}


func userLoggedInWebEntry( webEntry WebEntryUserLoggedIn ) WebEntry {

    return func(connectionData ConnectionData, sessionData SessionData) string {
        // // THIS IS THE LOGIC I DO NOT WANT TO DUPLICATE, HENCE ITS USING CLASS INHERITANCE
        var user User = "John"
        return webEntry( user )
    } 

}


func SavePasswordWebEntry( user User ) string {
    return fmt.Sprintf("user is %s", user )
}

solved How do I translate this Java interface & inheritence structure to Golang? [closed]