Cha*_*ker 10 import package go
我试图理解包的工作方式在golang实际执行的方面更好,而不是通常做或被认为是好的做法(我们以后也可以谈论好的做法,但我希望先了解一下).
从有效开始说:
"另一个惯例是包名是其源目录的基本名称......"
但是,上面的描述似乎并不是强制要求的.因此,我想知道,如果我被允许在同一目录库的顶部有多个具有不同包声明的文件.如果允许我在同一目录中有多个包声明,那么如何导入它们并在同一个文件中单独使用它们?基本上,我想我遇到的问题之一是由于一些go教程/文档的措辞.如果是按惯例,那么对我而言,它暗示它不是由语言强制执行的.因为,例如,程序员不按惯例编写函数的关键字.我们写,因为否则go会对你大喊大叫,它不会编译.因此,我希望用下面的示例澄清这一点(如果可能的话,更改go的文档,因为在我看来这是一个大问题,如何做到这一点?).funcfunc
例如说我有三个文件A.go,B.go,C.go打印打印功能Print(),简单地打印出A,B,C分别.它们都位于同一个名为maybe的基目录中base.然后每个都有一个不同的包声明package Apkg, package Bpkg, package Cpkg.
那你怎么去进口呢?以下工作会有效吗?
package main
import(
nameA "github.com/user_me/base/Apkg"
nameB "github.com/user_me/base/Bpkg"
nameC "github.com/user_me/base/Cpkg"
)
func main() {
nameA.Print() \\prints a
nameB.Print() \\prints b
nameC.Print() \\prints c
}
Run Code Online (Sandbox Code Playgroud)
或者我们甚至不需要指定名称,如果包装状态的顶部已经不同:
package main
import(
"github.com/user_me/base"
)
func main() {
Apkg.Print() \\prints a
Bpkg.Print() \\prints b
Cpkg.Print() \\prints c
}
Run Code Online (Sandbox Code Playgroud)
打印文件是:
前:
//file at github.com.user_me/base and name A.go
package Apkg
import "fmt"
func Print(){
fmt.Println("A")
}
Run Code Online (Sandbox Code Playgroud)
B.go:
//file at github.com.user_me/base and name B.go
package Bpkg
import "fmt"
func Print(){
fmt.Println("B")
}
Run Code Online (Sandbox Code Playgroud)
C.go://文件在github.com.user_me/base和名称C.go包Cpkg
import "fmt"
func Print(){
fmt.Println("C")
}
Run Code Online (Sandbox Code Playgroud)
另外,如果你能有一个名称不同从base,可能有人澄清我如何的进口实际上是做了什么?如果包名称是package Apkg基数,则导入必须是import github.com/user_me/base或import github.com/user_me/base/Apkg或github.com/user_me/Apkg.
我还没有测试过这个,但我很快就会这样做.进入的交易对我来说有点混乱,并希望得到答案并与世界分享.
不,每个文件夹是1个包,所以你必须拥有它们:
$GOPATH/src/github.com/user_me/base/Apkg/a.go
$GOPATH/src/github.com/user_me/base/Bpkg/b.go
$GOPATH/src/github.com/user_me/base/Cpkg/c.go
Run Code Online (Sandbox Code Playgroud)
你甚至不能建立它:
?? oneofone@Oa [/t/blah]
???? go build
can't load package: package .: found packages pkgA (blah1.go) and pkgB (blah2.go) in /tmp/blah
Run Code Online (Sandbox Code Playgroud)
您的包名称不需要与它们所在的目录具有相同的名称,但是一个目录中的所有文件必须具有相同的包名称.
此外,您可以在导入时重命名包,例如:
import (
cr "crypto/rand"
mr "math/rand"
)
Run Code Online (Sandbox Code Playgroud)
或者你的图书馆被称为主要(坏主意btw):
import m "github.com/user_me/base/main"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2993 次 |
| 最近记录: |