Thanks for the reply. Indeed the solution for what I was trying to do was 
to use the interface as the param, not a pointer to the concrete type. I 
had initially tried to pass a pointer to an interface which of course did 
not work.

On Wednesday, February 8, 2017 at 11:12:54 PM UTC+1, Ron Evans wrote:
>
> I am trying to use an embedded type that implements an interface, in order 
> to provide some functional options to a group of related types.
>
> However, I am receiving an error that I cannot use the embedded type to 
> call the option function.
>
> Here is a contrived example. A type "Waiter" implements the "TableServer" 
> interface using the type "tableserver".
>
> The error is "cannot use SetTable(9) (type func(*tableServer)) as type 
> func(*Waiter) in argument to NewWaiter"
>
>
> package main
>
> import "fmt"
>
> type tableServer struct {
>     table int
> }
>
> type TableServer interface {
>     SetTable(table int)
>     GetTable() int
> }
>
> func NewTableServer() TableServer {
>     return &tableServer{}
> }
>
> func (i *tableServer) SetTable(table int) {
>     i.table = table
> }
>
> func (i *tableServer) GetTable() int {
>     return i.table
> }
>
> func SetTable(table int) func(*tableServer) {
>     return func(i *tableServer) {
>         i.SetTable(table)
>     }
> }
>
> type Waiter struct {
>     Name string
>     TableServer
> }
>
> func NewWaiter(name string, options ...func(*Waiter)) *Waiter {
>     w := &Waiter{
>         Name:        name,
>         TableServer: NewTableServer(),
>     }
>
>     for _, option := range options {
>         option(w)
>     }
>
>     return w
> }
>
> func main() {
>     waiter := NewWaiter("joe")
>     fmt.Println(waiter.Name, "is working table", waiter.GetTable())
>
>     // the following line cannot compile, with error:
>     // ./opts.go:56: cannot use SetTable(9) (type func(*tableServer)) as 
> type func(*Waiter) in argument to NewWaiter
>     waiter = NewWaiter("bob", SetTable(9))
>     fmt.Println(waiter.Name, "is working table", waiter.GetTable())
> }
>
>
> Any suggestions? Thanks in advance!
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to