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 的是包的路径, 引用包的东西是使用包名

最新文章

  1. 把某一字段更新为连续值的SQL
  2. bootstrap-8
  3. UML3
  4. JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第4章 外观(Facade)模式
  5. Android带头像的用户注册页面
  6. c#之内置类型
  7. JAVA通过url获取页面内容
  8. Javascript面向对象编程(二):构造函数的继承
  9. 关于Linux的虚拟内存管理
  10. 002_JS基础_JavaScript基础语法01
  11. javascript学习(三)——常用方法(2)
  12. 【转】Redis学习笔记(四)如何用Redis实现分布式锁(1)—— 单机版
  13. 《精通Oracle SQL(第2版)》PDF
  14. 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?
  15. Android Studio -- 关联源码
  16. [转载]ViewPort &lt;meta&gt;标记
  17. java_15 System类
  18. Expo大作战(九)--expo的工作原理,以及版本发行说明
  19. mysql事务,select for update,及数据的一致性处理
  20. js简单的面试题

热门文章

  1. ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
  2. 调用DLL的2种方式
  3. 在64位SQL Server中创建Oracle的链接服务器 Link Server
  4. IDEA MAVEN 1.8无效的源发行版
  5. Python中sort与sorted函数
  6. Angular25 组件的生命周期钩子
  7. 521. Longest Uncommon Subsequence I 最长不同子数组
  8. Luogu 4069 [SDOI2016]游戏
  9. Install zlib/libpng/jpeg/freetype/libgd/GD on Mavericks即mac10.9(转)
  10. 注入学习1:SQL注入语句大全