golang包引用解析
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
test1
和 test2
这是两个不同的项目. 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 的是包的路径, 引用包的东西是使用包名
golang包引用解析的更多相关文章
- golang包引用
一.我的GOPATH环境变量值如下图: 二.在GOPATH路径下面的的src目录下面的目录名称就是引用里面包的起始位置,如下图: 三.举例说明:这里引用同一个项目的包,源文件“learn/main/m ...
- golang reflect包使用解析
golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...
- Golang 包管理机制
Golang 包管理机制 1. 历史 在go1.11之前, 并没有官方的包管理机制(Godep算个半官方), 主流的包管理机制有: GoVendor Glide Godep 在go1.11之后, 官方 ...
- Golang 包了解以及程序的执行
Golang 包了解以及程序的执行 引言 Go 语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案.Go 语言中为我们提供了很多内置包,如 fmt.o ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- Hadoop工程包架构解析
Hadoop源码解析 1 --- Hadoop工程包架构解析 1 Hadoop中各工程包依赖简述 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算 ...
- go语言的安装和配置,以及包引用
1.下载和安装 首先大家可以去官网下载 http://golang.org/dl/ 如果官网你看不懂的话,可以到这里下载: http://golangtc.com/download ,这里也提供了百度 ...
- Golang 包管理简介
Golang 包管理 在一个项目里,如果想引用本地包,经常会把新手搞的莫名其妙.这里通俗记录一下. 首先先要知道几个默认的规则 必须定义环境变量GOPATH,GOPATH可以定义多个目录 所有项目代码 ...
- Golang包管理工具glide简介
Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...
随机推荐
- jetbrains idea/webstorm等(注册,激活,破解码,一起支持正版,最新可用)(2017.3.16更新)【转】
选择 License server (2017.3.16更新) http://idea.imsxm.com/ 详细请参考: http://www.cnblogs.com/ys-wuhan/p/584 ...
- MySQL与SQLServer的update left join语法区别
需求: 表A 字段 A_ID, A_NAME, B_ID 表B 字段 B_ID, B_NAME 需求把A的所有A_NAME更新为相应的B的 B_NAME. mysql做法: UPDATE A LEFT ...
- Python之面向过程和面向对象的区别
一.面向过程 1.面向过程:核心是过程二字,过程指的是解决问题的步骤,好比如设计一条流水线,是一种机械式的思维方式. 就是程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 .基本设计思路就是 ...
- Stream01 定义、迭代、操作、惰性求值、创建流、并行流、收集器、stream运行机制
1 Stream Stream 是 Java 8 提供的一系列对可迭代元素处理的优化方案,使用 Stream 可以大大减少代码量,提高代码的可读性并且使代码更易并行. 2 迭代 2.1 需求 随机创建 ...
- 什么是Kali Linux?
什么是Kali Linux? Kali Linux是一个基于Debian的Linux发行版,旨在实现高级渗透测试和安全审计.Kali包含数百种工具,适用于各种信息安全任务,如渗透测试,安全研究,计算机 ...
- HDU 5293 Tree chain problem
树状数组 + dp 设$f_i$表示以$i$为根的子树中的能选取的最大和,$sum_x$表示$\sum_{f_y}$ ($y$是$x$的一个儿子),这样子我们把所有给出的链按照两点的$lca$分组, ...
- wordpress中add_action和add_filter
add_action( string $tag, callable $function_to_add, int $priority = 10,int $accepted_args = 1 ) 官网是这 ...
- Java 自定义异常类
类1:public class LogicException extends RuntimeException { //业务逻辑异常 /** * * @param mes ...
- 编写高质量代码改善C#程序的157个建议——建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的
建议51:具有可释放字段的类型或拥有本机资源的类型应该是可释放的 在建议50中,我们将C#中的类型分为:普通类型和继承了IDisposable接口的非普通类型.非普通类型除了包含那些托管资源的类型外, ...
- APUE(1)----UNIX基础知识
一.UNIX体系结构 所有操作系统都为他们所运行的程序提供服务,典型的服务包括:执行新程序.打开文件.读文件.分配存储区等.严格意义上来说,操作系统可以定义为一种软件,它控制计算机硬件资源,提供程序运 ...