基本概念

  • 包是函数和数据的集合
  • 使用package关键字进行定义
  • 文件名可以不完全与包名相同
  • 包名通常使用小写字母定义
  • 包里可以有很多文件,但是他们共享同一个包名
  • 通过函数名称的大小写区分私有还是可被外部使用的
    • 大写,可以被外部使用(exported)
    • 小写,私有函数(private)
    • 请注意,“大写”一词不仅限于 US-ASCII——它还扩展到所有双字字母(拉丁文、希腊文、西里尔文、亚美尼亚文和科普特文)

示例:公有和私有函数及Go中包管理方式

代码及结构

先看一下目录结构,注意这里的src名称是必须的,go在设置了GOPATH后,默认会添加src去寻找package,暂未查询是否有方法不按照src查询

├── main.go
└── src└── myfunc└── myfunc.go
package mainimport "myfunc"func main() {myfunc.MyPublicFunc()// NOTE(Ray): Can not call private function//myfunc.myPrivateFunc()
}

根据上面的描述,Go语言中通过包中函数的名称来区分公共函数和私有函数,我们在main函数中是无法调用myPrivateFunc的

package myfuncimport "fmt"func MyPublicFunc() {fmt.Println("Use my public function.")
}// NOTE(Ray): This is private function, can not be used outside
func myPrivateFunc() {fmt.Println("Use my public function.")
}

此时如果执行通过go run方式执行,会看到如下的提示信息,这与大部分语言对于包管理方式相关,所以我们通过两种不同的方法来让代码执行起来

main.go:3:8: package myfunc is not in GOROOT (/usr/local/go/src/myfunc)

通过设置GOPATH执行

go env

返回如下,这里面对我们后续执行有影响的两个参数GO111MODULE和GOPATH

  • GO111MODULE是在Go 1.11引入的Go模块,需要搭配go.mod使用
  • GOPATH则是Go语言中旧的依赖管理模式,该模式下无法对依赖的版本进行控制
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/root/workspace/go/test_package/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH=""
GOPRIVATE=""
GOPROXY="https://goproxy.cn"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.17.6"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build3817126445=/tmp/go-build -gno-record-gcc-switches"

如果要使用gopath模式引用包,则需要关闭mod模式

export GO111MODULE=off

设置GOPATH为当前路径,即main.go所在的路径

go env -w GOPATH=$(pwd)

此时再查看go env时,GOPATH已经发生改变

GOPATH="/root/workspace/go/test_package"

我们再次尝试执行代码

go run main.go

可以看到public函数被调用

Use my public function.

4.1 Go语言中包(Packages)基础知识相关推荐

  1. 4.2 Go语言中包(Packages)的命名

    基本规则 Go标准库使用了Unix名称命名函数 其他函数使用驼峰命名CamelCase,例如:ReadFile, NewWriter, 使用import导入包后,跟随点(.)访问函数,例如:bytes ...

  2. go语言复数包_Go语言中包的风格指南

    Go 语言也有自己的命名与代码组织规则.漂亮的代码,布局清晰.易读易懂,就像是设计严谨的 API 一样.拿到代码,用户首先看到和接触的就是布局.命名还有包的结构. 这篇文章不是为了给大家设立硬性的规定 ...

  3. Java中的线程基础知识

    Java中的线程基础知识 1.线程概念 线程是程序运行的基本执行单元.当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个 ...

  4. 中职计算机基础课堂传统教学,中职计算机基础知识教学创新

    刘静月 [摘要]信息化是当今世界经济和社会发展的趋势,以计算机技术为代表的信息技术已经成为拓展人类能力不可缺少的工具,具有越来越重要的地位.中等职业学校在培养未来的高素质劳动者和技能型人才时,使学生掌 ...

  5. python编程的基本方法有哪些_Python编程中常用的基础知识有哪些?

    今天小编要跟大家分享的文章是关于Python编程中常用的基础知识有哪些?正在从事Python相关工作的小伙伴们,来和小编一起看一看本篇文章,希望本篇文章能够对大家有所帮助. 1.正则表达式替换 目标: ...

  6. 中职计算机基础课教学策略研究,中职计算机基础知识教学方法及教学策略研究.doc...

    中职计算机基础知识教学方法及教学策略研究 中职计算机基础知识教学方法及教学策略研究摘要:中职教育的培养目标是造就具有综合职业能力和全面素质的.直接工作在生产.技术.管理和服务第一线的应用型.技能型人才 ...

  7. day29—JavaScript中DOM的基础知识应用

    转行学开发,代码100天--2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通 ...

  8. 云计算中的网络基础知识

    一.云计算中的网络基础知识 1.这是虚拟化中的网络框架 第一个圆柱形的设备叫路由器 作用:网络的出口(这不是家用的那种路由器,这里的路由器是指企业级的) 第二行的叫三层交换机 作用:连接不同的网段,可 ...

  9. 提高中职计算机知识教学改革途径,提高中职计算机基础知识教学改革的途径

    提高中职计算机基础知识教学改革的途径 来源:用户上传 作者: 摘要:随着科学技术的不断发展,通信技术的也不断改变人们的工作生活方式,而中等职业学校主要的目标就是要培养高素质的劳动者,为适应时代的需求, ...

最新文章

  1. ZOJ 3781 最短路(想法好题目)
  2. Raspberry 4B安装wiringPi库 和 python-dev包
  3. SSL为Windows server 2008 IIS7进行加密连接
  4. 全球及中国多非利特原料药行业发展模式分析及投资前景规划报告2022-2027年版
  5. 笔记-项目管理基础知识-项目信息(工作绩效信息、绩效数据、绩效报告)
  6. PHP二维数组根据字段排序
  7. java猜字母讲解_java_猜字母游戏
  8. 中药ppi网络图太杂乱_太杂乱了吗? 这是您的iPhone,iPad,Android或台式机的15张简约壁纸...
  9. Java-Jdk12版本下载后没有Jre的解决方案以及配置环境变量
  10. mysql金额数据类型,热度飙升!
  11. python在线发音-Python如何实现文本转语音
  12. mysql 分组后,统计记录条数
  13. p6spy监测mysql_Spring使用p6spy监控sql
  14. 左右滑动日历(微信小程序)
  15. 学习安装java运行环境
  16. 布尔教育mysql优化_布尔教育燕十八mysql优化视频课件源码分享
  17. 柴达木盆地第四大气区探实 尖北产量超亿方
  18. Maven Pom文件标签详解
  19. carsim与simulink联合仿真注意事项
  20. 联想笔记本关闭切换大小写的提示图标

热门文章

  1. selenium之浏览器、元素、鼠标等操作总结
  2. python爆内存list_Python3基础 list del 从内存中删除整个列表
  3. 03UEc++【打飞艇:导弹与飞艇的碰撞事件】
  4. 云服务器(一):anaconda安装记录以及R、Rstudio安装
  5. redis:db0-db15
  6. IDEA中Git简单入门
  7. 儿歌nbsp;nbsp;--nbsp;悠悠寸草心
  8. svn切换账号的问题
  9. 苹果手机相片删除了怎么恢复回来?恢复照片,3分钟搞定!
  10. 呼叫中心的实时语音分析