包使用注意事项和细节(1)|学习笔记

简介: 快速学习包使用注意事项和细节(1)

开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map:包使用注意事项和细节(1)与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/625/detail/9595


包使用注意事项和细节(1)

1.在给一个文件打包时,该包对应一个文件夹,比如这里的 utils 文件夹对应的包名就是 utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。  

2.通常保持一致,意味着也不一定一样。例如

image.png文件夹名字为 utils,但是包名可以写为 abc,包名和文件夹名一般相同。 保存没有问题,但是在 main.go中运行” go_code/chapter06/fundemo01/utils”或者” result :=utils.Cal(n1, n2, operator)”代码时存在包名仍为 utils,运行结果报错,显示underfined: utils,并且提示包名应该为 abc。  所以将 result :=utils.Cal 中的 utils 改为 abc,为包名, 而 go_code/chapter06/fundemo01/utils 中的 utils 其实是引到包所在的文件夹。之后运行结果正确。 但是考虑到运行 abc 不常见,所以一般还是与包名保持一致,习惯上还是保持一致。  

3.当一个文件要使用其它包函数或变量时,需要先引入对应的包相当于go_code/chapter06/fundemo01/utils,需要现在 main 中引入

1)引入方式1: import "包名"

2)引入方式2: import ( "包名” "包名" ) 例如将 import (     “fmt”    

“go_code/chapter06/fundemo01/utils” )

改为 import (     “fmt”    ) import “go_code/chapter06/fundemo01/utils”

但是习惯上放在一起写  

3)package 指令在文件第一行,然后是 import 指令。

4)在 import 包时,路径从$GOPATH 的 src 下开始,不用带 src ,编译器会自动从 src 下开始引入 GOPATH 之前在环境变量中配置过,打开计算机高级系统设置,其中在系统变量中定义了 gopath,如图,该 GOPATH 在D盘下image.png实际上是从该路径下的 src 开始去定位  

5)为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它 语言的 public ,这样才能跨包访问。比如 utils.go 的 Cal 函数 image.png如图若 Cal 写为小写 cal,则其他包不能访问 另外,若定义了一个变量需要其他包使用,例如 util 包定义了一个变量,输入 var num1 int = 300 需要在 main 包中使用该变量,则要将 num 写为大写 Num,然后在 main.go中输入 fmt.Println( “utils.go Num”, utils.Num1) 运行后可以访问  

6)在访问其它包函数,变量时,其语法是包名.函数名,比如这里的 main.go 文件中  

7)如果包名较长,Go支持给包取别名,注意细节,取别名后,原来的包名就不能使用了,比如在 main.go中 “go_code/chapter06/fundemo01/utils” 引入了包所在的文件夹,fmt.Println( “utils.go Num”, utils.Num1)就是通过 utils 进行访问,也可以给该文件夹对应的包取个别名  输入 util “go_code/chapter06/fundemo01/utils”,给这个包取别名为 util,那么下面的函数要通过该别名进行访问,不能再使用原来的 utils,例如修改 fmt.Println( “utils.go Num”, util.Num1) 为了增加效果,在 number 后添加一个~,即 utils.go Num~  运行结果为 utils.go Num~=300 result~=3.5 result~=30.15 所以看到在引入的路径前写有一个变量,就相当于给该文件夹所在的包起了一个别名。

说明: 如果给包取了别名,则需要使用别名来访问该包的函数和变量。

相关文章
|
机器学习/深度学习 人工智能 Rust
Grok-1:史上最大开源LLM的技术解析
Grok-1:史上最大开源LLM的技术解析
1865 1
|
开发工具 git
vue3+ts:约定式提交(git husky + gitHooks)
vue3+ts:约定式提交(git husky + gitHooks)
368 0
|
8月前
|
人工智能 Linux 开发工具
携手龙蜥,Alinux 最佳 AI 镜像服务商公布,堡塔、飞致云等 6 家企业实力登榜
广东堡塔、杭州飞致云、北京君云时代、网久软件、云九天网络、计算巢社区 6 家优质服务商伙伴。
|
11月前
|
存储 弹性计算 运维
云端问道 7 期实践教学-使用操作系统智能助手 OS Copilot 轻松运维与编程
使用操作系统智能助手 OS Copilot 轻松运维与编程
237 14
|
Java C++ 索引
让星星⭐月亮告诉你,LinkedList和ArrayList底层数据结构及方法源码说明
`LinkedList` 和 `ArrayList` 是 Java 中两种常见的列表实现。`LinkedList` 基于双向链表,适合频繁的插入和删除操作,但按索引访问元素效率较低。`ArrayList` 基于动态数组,支持快速随机访问,但在中间位置插入或删除元素时性能较差。两者均实现了 `List` 接口,`LinkedList` 还额外实现了 `Deque` 接口,提供了更多队列操作。
277 3
|
运维 监控 Serverless
揭秘云计算中的Serverless架构:优势、挑战与实践
揭秘云计算中的Serverless架构:优势、挑战与实践
456 0
|
缓存 Java 数据库连接
在Java中实现数据库连接池
在Java中实现数据库连接池
|
存储 安全 Java
小说阅读平台设计与实现
小说阅读平台设计与实现
|
网络协议 Linux API
Linux C TCP编程(socket,select/poll/epoll)
本文主要介绍了linux下标准的TCP通信流程,实现了客户端和服务器的通信,主要实现了消息的回发,即服务器将消息原封不动的回发给客户端。如果对接口不熟悉可以参考socket api介绍或者参考其他博客。
273 0
|
容灾 关系型数据库 MySQL
Centos通过Docker搭建MySQL的PXC集群
Centos通过Docker搭建MySQL的PXC集群
843 0
Centos通过Docker搭建MySQL的PXC集群