在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:traefik/yaegi开源软件地址:https://github.com/traefik/yaegi开源编程语言:Go 98.3%开源软件介绍:Yaegi is Another Elegant Go Interpreter. It powers executable Go scripts and plugins, in embedded interpreters or interactive shells, on top of the Go runtime. Features
InstallGo packageimport "github.com/traefik/yaegi/interp" Command-line executablego get -u github.com/traefik/yaegi/cmd/yaegi Note that you can use rlwrap (install with your favorite package manager),
and alias the CI Integrationcurl -sfL https://raw.githubusercontent.com/traefik/yaegi/master/install.sh | bash -s -- -b $GOPATH/bin v0.9.0 UsageAs an embedded interpreterCreate an interpreter with package main
import (
"github.com/traefik/yaegi/interp"
"github.com/traefik/yaegi/stdlib"
)
func main() {
i := interp.New(interp.Options{})
i.Use(stdlib.Symbols)
_, err := i.Eval(`import "fmt"`)
if err != nil {
panic(err)
}
_, err = i.Eval(`fmt.Println("Hello Yaegi")`)
if err != nil {
panic(err)
}
} As a dynamic extension frameworkThe following program is compiled ahead of time, except
package main
import "github.com/traefik/yaegi/interp"
const src = `package foo
func Bar(s string) string { return s + "-Foo" }`
func main() {
i := interp.New(interp.Options{})
_, err := i.Eval(src)
if err != nil {
panic(err)
}
v, err := i.Eval("foo.Bar")
if err != nil {
panic(err)
}
bar := v.Interface().(func(string) string)
r := bar("Kung")
println(r)
} As a command-line interpreterThe Yaegi command can run an interactive Read-Eval-Print-Loop: $ yaegi
> 1 + 2
3
> import "fmt"
> fmt.Println("Hello World")
Hello World
> Note that in interactive mode, all stdlib package are pre-imported, you can use them directly: $ yaegi
> reflect.TypeOf(time.Date)
: func(int, time.Month, int, int, int, int, int, *time.Location) time.Time
> Or interpret Go packages, directories or files, including itself: $ yaegi -syscall -unsafe -unrestricted github.com/traefik/yaegi/cmd/yaegi
> Or for Go scripting in the shebang line: $ cat /tmp/test
#!/usr/bin/env yaegi
package main
import "fmt"
func main() {
fmt.Println("test")
}
$ ls -la /tmp/test
-rwxr-xr-x 1 dow184 dow184 93 Jan 6 13:38 /tmp/test
$ /tmp/test
test DocumentationDocumentation about Yaegi commands and libraries can be found at usual godoc.org. LimitationsBeside the known bugs which are supposed to be fixed in the short term, there are some limitations not planned to be addressed soon:
ContributingLicense |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论