2016-04-04 48 views
4

我无法找到可以在012操作操场上输入哪些软件包的列表http://play.golang.org/。我试图用ebnf的(显然是实验性的)包。哪些软件包可以在游乐场中导入?

package main 

import "fmt" 
import "golang.org/x/exp/ebnf" 

const g = ` 
Production = name "=" [ Expression ] "." . 
Expression = Alternative { "|" Alternative } . 
Alternative = Term { Term } . 
Term  = name | token [ "…" token ] | Group | Option | Repetition . 
Group  = "(" Expression ")" . 
Option  = "[" Expression "]" . 
Repetition = "{" Expression "}" .` 

func main() { 
    fmt.Println(g) 
} 

是任何地方指出,golang.org/src/只有基本包将导入(如果是这样的话):然而,即使一个简短的程序将无法(在第4行进口中断)从golang.org导入?

我真的很喜欢玩这个实验包,甚至在操场上还有非实验性的补充库,如currency

+1

“操场可以使用大部分标准库,但有一些例外。”那么,小于stdlib,然后;) –

+0

顺便说一句,感谢所有;当然我会阅读。我说每个人都说它说。它似乎并没有说明“最”是什么,也不是说标准库中没有的东西不能被使用。关于它的博客文章确实有助于指出标准库行为与正常情况不同的某些领域。根据答案中提供的测试,我很欣赏更完整的列表。 – dlamblin

回答

5

在操场上的关于按钮给出了一些提示:

操场可以使用大多数标准库的,也有一些例外。

通过标准库标准库的包的意思,这是上市Packages页面上,下Standard library部分。在Other部分下列出的软件包不符合要求(这是您尝试的操作 - 软件包golang.org/x/exp/ebnf属于其他类别下列出的实验软件包和弃用软件包)。

必读的链接,如果您想了解更多关于游乐场实现:

The Go Blog: Inside the Go Playground

这里是一个详尽的操场测试导入所有的标准库包,以显示他们至少可以导入,但这并不意味着所有的东西(甚至任何东西)都可以合理地从他们那里使用。来自标准库的唯一产生编译错误的软件包是runtime/cgo;没有可构建的Go源文件的“包”不包括在内,原因很明显(因为如果文件夹不包含至少一个可构建的Go源文件,则其文件夹为not a package)。

这是Playground Link自己尝试。

package main 

import (
    _ "archive/tar" 
    _ "archive/zip" 

    _ "bufio" 
    _ "bytes" 

    _ "compress/bzip2" 
    _ "compress/flate" 
    _ "compress/gzip" 
    _ "compress/lzw" 
    _ "compress/zlib" 

    _ "container/heap" 
    _ "container/list" 
    _ "container/ring" 

    _ "crypto" 
    _ "crypto/aes" 
    _ "crypto/cipher" 
    _ "crypto/des" 
    _ "crypto/dsa" 
    _ "crypto/ecdsa" 
    _ "crypto/elliptic" 
    _ "crypto/hmac" 
    _ "crypto/md5" 
    _ "crypto/rand" 
    _ "crypto/rc4" 
    _ "crypto/rsa" 
    _ "crypto/sha1" 
    _ "crypto/sha256" 
    _ "crypto/sha512" 
    _ "crypto/subtle" 
    _ "crypto/tls" 
    _ "crypto/x509" 
    _ "crypto/x509/pkix" 

    _ "database/sql" 
    _ "database/sql/driver" 

    _ "debug/dwarf" 
    _ "debug/elf" 
    _ "debug/gosym" 
    _ "debug/macho" 
    _ "debug/pe" 
    _ "debug/plan9obj" 

    _ "encoding" 
    _ "encoding/ascii85" 
    _ "encoding/asn1" 
    _ "encoding/base32" 
    _ "encoding/base64" 
    _ "encoding/binary" 
    _ "encoding/csv" 
    _ "encoding/gob" 
    _ "encoding/hex" 
    _ "encoding/json" 
    _ "encoding/pem" 
    _ "encoding/xml" 

    _ "errors" 
    _ "expvar" 
    _ "flag" 
    _ "fmt" 

    _ "go/ast" 
    _ "go/build" 
    _ "go/constant" 
    _ "go/doc" 
    _ "go/format" 
    _ "go/importer" 
    _ "go/parser" 
    _ "go/printer" 
    _ "go/scanner" 
    _ "go/token" 
    _ "go/types" 

    _ "hash" 
    _ "hash/adler32" 
    _ "hash/crc32" 
    _ "hash/crc64" 
    _ "hash/fnv" 

    _ "html" 
    _ "html/template" 

    _ "image" 
    _ "image/color" 
    _ "image/color/palette" 
    _ "image/draw" 
    _ "image/gif" 
    _ "image/jpeg" 
    _ "image/png" 

    _ "index/suffixarray" 

    _ "io" 
    _ "io/ioutil" 

    _ "log" 
    _ "log/syslog" 

    _ "math" 
    _ "math/big" 
    _ "math/cmplx" 
    _ "math/rand" 

    _ "mime" 
    _ "mime/multipart" 
    _ "mime/quotedprintable" 

    _ "net" 
    _ "net/http" 
    _ "net/http/cgi" 
    _ "net/http/cookiejar" 
    _ "net/http/fcgi" 
    _ "net/http/httptest" 
    _ "net/http/httputil" 
    _ "net/http/pprof" 
    _ "net/mail" 
    _ "net/rpc" 
    _ "net/rpc/jsonrpc" 
    _ "net/smtp" 
    _ "net/textproto" 
    _ "net/url" 

    _ "os" 
    _ "os/exec" 
    _ "os/signal" 
    _ "os/user" 

    _ "path" 
    _ "path/filepath" 

    _ "reflect" 
    _ "regexp" 
    _ "regexp/syntax" 

    _ "runtime" 
    // _ "runtime/cgo" // ERROR: missing Go type information 
         // for global symbol: .dynsym size 60 
    _ "runtime/debug" 
    _ "runtime/pprof" 
    _ "runtime/race" 
    _ "runtime/trace" 

    _ "sort" 
    _ "strconv" 
    _ "strings" 
    _ "sync" 
    _ "sync/atomic" 
    _ "syscall" 

    _ "testing" 
    _ "testing/iotest" 
    _ "testing/quick" 

    _ "text/scanner" 
    _ "text/tabwriter" 
    _ "text/template" 
    _ "text/template/parse" 

    _ "time" 
    _ "unicode" 
    _ "unicode/utf16" 
    _ "unicode/utf8" 
    _ "unsafe" 
) 

func main() { 
    println("ok") 
} 
1

它似乎取决于游乐场发射的环境。源中的相关代码似乎是compileAndRun FUNC,特别是线88:

cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32", "GOPATH=" + os.Getenv("GOPATH")} 

后者从环境GOPATH。

除此之外,操场源没有任何明确的可导入白名单(或黑名单)的包。

可能要注意的是,compileAndRun func没有编码到go get包,所以GOPATH中的任何东西都是可用的。

对Makefile和Dockerfile的细读并未透露规范http://play.golang.org站点中采用的特定部署步骤,因此我们只需依赖Markus W Mahlberg指出的文档;即“stdlib的子集”。

此外,您可以部署您自己的go操场版本,并为您选择的任何GOPATH环境提供它。