golang 之 import 和 package 的使用

栏目: Go · 发布时间: 7年前

内容简介:golang 使用包 package 来管理定义模块,可以使用 import 关键字来导入使用。go import 的包是由 包路径/包名 组合而成的,例如导入我们自定义的 baz 包,包路径为 $GOPATH/src/foo/bar/baz,baz 包的源码都存放在此目录下。我们需要规范的将 baz 包中源码的 package 定义为 baz,就定义好一个可 import 载入的的包了。

golang 使用包 package 来管理定义模块,可以使用 import 关键字来导入使用。

  • 如果导入的是 go 自带的包,则会去安装目录 $GOROOT/src 按包路径加载,如 fmt 包
  • 如果是我们 go get 安装或自定义的包,则会去 $GOPATH/src 下加载

package 的定义

go import 的包是由 包路径/包名 组合而成的,例如导入我们自定义的 baz 包,包路径为 $GOPATH/src/foo/bar/baz,baz 包的源码都存放在此目录下。

我们需要规范的将 baz 包中源码的 package 定义为 baz,就定义好一个可 import 载入的的包了。

hello 模块

//$GOPATH/src/foo/bar/baz/hello.go
package baz

import (
    "fmt"
)

// 模块初始化函数 import 包时被调用
func init() {
    fmt.Println("hello module init function")
}

func Hello() {
    return "hello"
}

world 模块

//$GOPATH/src/foo/bar/baz/world.go
package baz

import (
    "fmt"
)

// 模块初始化函数 import 包时被调用
func init() {
    fmt.Println("world module init function")
}

func World() string {
    return "world"
}
package main

import (
    "fmt"
    "foo/bar/baz" //引入我们自定义的包
)

func main() {
    fmt.Println(baz.Hello(), baz.World())
}

import的使用

普通操作

import (
    "fmt"
    "log"
    "foo/bar/baz"
)

普通导入就是按照加载机制,将要使用的包导入进来,然后使用 packageName.MethodName 的方式调用包内的方法即可。注意如果要包方法在其他包中可以调用,包方法需要首字母大写,例如:fmt.Println() fmt.Printf()。

别名操作

package main

import (
    "fmt"
    myBaz "foo/bar/baz"
)

func main() {
    fmt.Println(myBaz.Hello(), myBaz.World())
}

如果两个包的包名存在冲突,或者包名太长需要简写时,我们可以使用别名导入来解决。

点操作

package main

import (
    "fmt"
    . "foo/bar/baz"
)

func main() {
    fmt.Println(Hello(), World()) // 直接使用包内的方法即可 不需要显式使用包名
}

. 导入可以让包内的方法注册到当前包的上下文中,直接调用方法名即可,不需要再加包前缀。

下划线操作

package main

import (
    "fmt"
    _ "foo/bar/baz"
)

func main() {
    fmt.Println(baz.Hello(), baz.World()) // 错误 _ 并没有导入包 只是引入并执行包模块的 init  方法
}

_ 是包引用操作,只会执行包下各模块中的 init 方法,并不会真正的导入包,所以不可以调用包内的其他方法。

相信对很多 phper 来说遵循 PSR4 的 Namespace 会将与路径紧密相关命名空间也作为类名的一部分,而 golang 则只将模块目录文件夹名作为包名,前面的路径只是用来导入而和包名无关,还是有一点点需要注意的。


以上所述就是小编给大家介绍的《golang 之 import 和 package 的使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Design Accessible Web Sites

Design Accessible Web Sites

Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95

It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具