goscript-engine 0.1.0

goscript engine
Documentation
package main

type S1 struct {i int; j int}


func (s *S1) Inc() int {
    t := s.i
    s.i += 66
    assert(s.i - t == 66)
    return s.i
}

func (s S1) Inc2() int {
    assert(s.j == 0)
    s.j += 1
    assert(s.j == 1)
    return s.j
}

func typeAssert() {
    var i interface{} = "hello"

    s, ok := i.(string)
    assert(ok)
    assert(s == "hello")
   
    s1 := i.(string)
    assert(s1 == "hello")

    var j interface{} = "h"
    s, ok = j.(string)
    assert(ok)
    assert(s == "h")
}

type Add func(a int, b int) int


func main() {
    type S2 struct {i int}
	var s1 S1
    //var s2 S2

    s1.Inc()
    s1.Inc2()
    assert(s1.i == 66)
    assert(s1.j == 0)

    p := &s1.i
    *p = 5
    assert(s1.i == 5)
    assert(s1.i == *p)

    f := s1.Inc
    f()
    assert(s1.i == 71)

    var afunc Add = func(i int, j int) int { return i + j + 1}
    d := afunc(s1.i, s1.j)
    assert(d == s1.i + s1.j + 1)


    typeAssert()

}
// 3, 8, 9