github.com/traefik/yaegi@v0.15.1/interp/self_example_test.go (about)

     1  package interp_test
     2  
     3  import (
     4  	"log"
     5  
     6  	"github.com/traefik/yaegi/interp"
     7  	"github.com/traefik/yaegi/stdlib"
     8  )
     9  
    10  func ExampleInterpreter_self() {
    11  	i := interp.New(interp.Options{})
    12  
    13  	if err := i.Use(stdlib.Symbols); err != nil {
    14  		log.Fatal(err)
    15  	}
    16  	if err := i.Use(interp.Symbols); err != nil {
    17  		log.Fatal(err)
    18  	}
    19  
    20  	_, err := i.Eval(`import (
    21  	"fmt"
    22  	"log"
    23  
    24  	// Import interp to gain access to Self.
    25  	"github.com/traefik/yaegi/interp"
    26  )`)
    27  	if err != nil {
    28  		log.Fatal(err)
    29  	}
    30  
    31  	_, err = i.Eval(`
    32  		// Evaluate code directly.
    33  		fmt.Println("Hello Yaegi from Go")
    34  
    35  		// Evaluate code indirectly via the Self access point.
    36  		_, err := interp.Self.Eval("fmt.Println(\"Hello Yaegi from Yaegi\")")
    37  		if err != nil {
    38  			log.Fatal(err)
    39  		}
    40  `)
    41  	if err != nil {
    42  		log.Fatal(err)
    43  	}
    44  
    45  	// Output:
    46  	//
    47  	// Hello Yaegi from Go
    48  	// Hello Yaegi from Yaegi
    49  }