用於golang的類python shell環境

simplejia發表於2016-12-08

gop (go REPL)--http://github.com/simplejia/gop

實現初衷

  • 有時想快速驗證go某個函式的使用,臨時寫個程式太低效,有了gop,立馬開一個shell環境,邊寫邊執行,自動為你儲存上下文,還可隨時匯入匯出snippet,另外還有程式碼自動補全等等特性

特性

  • history record(gop啟動後會在home目錄下生成.gop資料夾, 輸入歷史會記錄在此)
  • tab complete,可以補全package,補全庫函式,需要系統安裝有gocode, 如果之前就安裝過gocode,如果發現不能自動補全,請執行go get -u github.com/nsf/gocode升級重新安裝下
  • 程式碼實時檢視和編輯功能[!命令功能]
  • snippet,可以匯入和匯出模板[<,>命令功能]

安裝

go get -u github.com/simplejia/gop

注意:

  • 輸入程式碼時,支援續行
  • 對於如下程式碼,只會在執行結束後一併輸出

    print(1);time.Sleep(time.Second);print(2)

  • 可以通過echo 123這種方式輸出, echo是println的簡寫,你甚至可以重新定義println變數來使用自己的列印方法,比如像我這樣定義(utils.IprintD的特點是可以列印出指標指向的實際內容,就算是巢狀的指標也可以,fmt.Printf做不到):
    import "github.com/simplejia/utils"
    var println = utils.IprintD 
  • 匯入專案package時,最好提前通過go install方式安裝包檔案到pkg目錄,這樣可以加快執行速度
  • 可以提前import包,後續使用時再自動引入
  • gop啟動後會自動匯入$PWD/gop.tmpl或者$HOME/.gop/gop.tmpl模板程式碼,可以把常用的程式碼儲存到gop.tmpl裡

demo

$ gop
Welcome to the Go Partner! [[version: 1.7, created by simplejia]
Enter '?' for a list of commands.
GOP$ ?
Commands:
        ?|help  help menu
        -[dpc][#],[#]-[#],...   pop last/specific (declaration|package|code)
        ![!]    inspect source [with linenum]
        <tmpl   source tmpl
        >tmpl   write tmpl
        [#](...)        add def or code
        reset   reset
        list    tmpl list
        arg     set or get command-line argument
GOP$ for i:=1; i<3; i++ {
.....    print(i)
.....    time.Sleep(time.Millisecond)
.....}
1
2
GOP$ import _ "github.com/simplejia/wsp/demo/mysql"
GOP$ import _ "github.com/simplejia/wsp/demo/redis"
GOP$ import _ "github.com/simplejia/wsp/demo/conf"
GOP$ import "github.com/simplejia/lc"
GOP$ import "github.com/simplejia/wsp/demo/service"
GOP$ lc.Init(1024)
GOP$ demoService := service.NewDemo()
GOP$ demoService.Set("123", "456")
GOP$ time.Sleep(time.Millisecond)
GOP$ echo demoService.Get("123")
456
GOP$ >gop
GOP$ <gop
GOP$ !
        package main

p0:     import _ "github.com/simplejia/wsp/demo/mysql"
p1:     import _ "github.com/simplejia/wsp/demo/redis"
p2:     import _ "github.com/simplejia/wsp/demo/conf"
p3:     import "github.com/simplejia/lc"
p4:     import "github.com/simplejia/wsp/demo/service"
p5:     import "fmt" // imported and not used
p6:     import "strconv" // imported and not used
p7:     import "strings" // imported and not used
p8:     import "time" // imported and not used
p9:     import "encoding/json" // imported and not used
p10:    import "bytes" // imported and not used

        func main() {
c0:             lc.Init(1024)
c1:             demoService := service.NewDemo()
c2:             _ = demoService
c3:             demoService.Set("123", "456")
c4:             time.Sleep(time.Millisecond)
        }

GOP$

相關文章