Skip to content

Methods definition #351

@c4s4

Description

@c4s4

In Go, a method defined on a pointer like this:

func (u *User) SayHello() {...}

May be called on a pointer or on an instance:

user1 := &User{Name: "Michel"}
user1.SayHello()
user2 := User{Name: "Michel"}
user2.SayHello()

But this is not the case in Anko, as following example demonstrates:

package main

import (
	"fmt"
	"log"

	"github.com/mattn/anko/env"
	"github.com/mattn/anko/vm"
)

type User struct {
	Name string
}

func (u *User) SayHello() {
	fmt.Printf("Hello %s!\n", u.Name)
}

func main() {
	e := env.NewEnv()
	user := User{Name: "Michel"}
	user.SayHello()
	err := e.Define("user", user)
	if err != nil {
		log.Fatalf("Define error: %v\n", err)
	}
	_, err = vm.Execute(e, nil, "user.SayHello()")
	if err != nil {
		log.Fatalf("Execute error: %v\n", err)
	}
}

Which prints:

$ go run main.go 
Hello Michel!
2022/01/12 18:42:13 Execute error: no member named 'SayHello' for struct
exit status 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions