golang包引用解析

liangjf · · 2570 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang包引用解析

环境变量配置如下:

  • GOROOT----[C:\Go]
  • GOPATH----[F:\workspace\go_home]

vs code配置如下:

F:\workspace\go_home 是总的golang工作空间, 在下面建立两个必须的目录 src(必须[F:\workspace\go_home\src]), pkg(必须[F:\workspace\go_home\pkg]), bin(非必须. go intanll时自动创建).

以后每一个单独的项目都是在 F:\workspace\go_home 单独创建一个目录. 比如下面:

  • F:\workspace\go_home\src\test1
  • F:\workspace\go_home\src\test2

test1test2 这是两个不同的项目. golang 主要是通过这样的目录结构, 来管理包的关系. 使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别

其中重要的是, 要理解应用包的定义. 应用包就是一个个独立的包体, 一个包一般是某个功能的源码文件组成的目录(可以有多层的子目录属于这个包). 其他在最顶层的包目录, 一般还会有个test文件,用于单元测试.

那么程序怎么运行呢?
在项目顶层创建一个main.go(程序运行入口), 包名注意一定是 package main.

看例子, 以下是整个demo的文件结构:

F:\workspace\go_home\src\test\calculate\calculate.go

//calculate.go
package calculate

func Mysqrt(val float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z - val) / (2 * val)
    }
    return z
}

F:\workspace\go_home\src\test\hello\hello.go

//hello.go
package hello

import "fmt"

func Hello() {
    fmt.Println("hello")
}

F:\workspace\go_home\src\test\main.go

//main.go
package main

import (
    "fmt"
    "test/calculate"    //这里import的是目录名, 不是包名字, 在golang中, 包名可以和目录名不一致的
    "test/hello"        //这里import的是目录名, 不是包名字, 在golang中, 包名可以和目录名不一致的
)

func main() {
    hello.Hello()       //注意注意注意: 这里应用的是包名, 不是目录名
    fmt.Println(calculate.Mysqrt(5))
}

//这里import的是目录名, 不是包名字, 在golang中, 包名可以和目录名不一致的

//注意注意注意: 这里应用的是包名, 不是目录名

这两个主要是要注意的, 总的来说是 import 的是包的路径, 引用包的东西是使用包名


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:liangjf

查看原文:golang包引用解析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2570 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传