Go语言学习--包

摘要:
包可以理解为用于存储的文件夹。go文件。您需要添加“包名不能包含-带有符号包名main的包是应用程序的入口包,而编译没有主包的源代码将无法获得可执行包中标识符的可见性。如果您想引用另一个包中的标识符(如变量、常量、类型、函数等)”在一个包中引用代码中其他包的内容时,需要使用import关键字导入使用的包:

包是多个Go源码的集合,是一种高级的代码复用方案。
Go语言中提供了很多内置包,例如fmt,os,io等...

包的定义

我们可以创建自己需要的包。
一个包可以理解为是一个存放.go文件的文件夹
go文件都需要在代码的第一行添加“ package 包名 ”代码,声明该文件归属的包。
注:

  • 一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能在多个文件夹下。
  • 包名可以不和文件夹的名字一样,包名不能包含 - 符号
  • 包名为main的包为应用程序的入口包,这种包编译后会得到一个可执行文件,而编译不包含main包的源代码则不会得到可执行文件

包中标识符的可见性

如果想在一个包中引用另外一个包里的标识符(如变量、常量、类型、函数等)时,该标识符必须是对外可见的(public)。
在Go语言中只需要将标识符的首字母大写就可以让标识符对外可见了。

包的导入

当在代码中引用其他包的内容时,需要使用import关键字导入使用的包:
import “包的路径”
注:

  • import导入语句通常放在文件开头包声明语句的下面。
  • 导入的包名需要使用双引号包裹起来。
  • 包名是从$GOPATH/src/后开始计算的,使用“/”进行路径分隔。
  • Go语言中禁止循环导入包。

单行导入

import "包1"

多行导入

import (
    "包1"
    "包2"
)

自定义包名

在导入包名的时候,我们还可以为导入的包设置别名。
语法格式如下:
import 别名 "包的路径"
例如:
import x "github.com/Q1mi/studygo/pkg_test" //其中x为我们为pkg_test设置的别名

匿名导入包

如果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包。
语法格式如下:
import _ "包的路径"
匿名导入的包与其他方式导入的包一样都会被编译到可执行文件中。

init()初始化函数

init()函数介绍

在Go语言程序执行时导入包语句会自动触发包内部init()函数的调用。需要注意的是: init()函数没有参数也没有返回值。 init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。
包初始化执行的顺序:
Go语言学习--包第1张

init()函数执行顺序

Go语言包会从main包开始检查其导入的所有包,每个包中又可能导入了其他的包。Go编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码。
在运行时,被最后导入的包会最先初始化并调用其init()函数:
Go语言学习--包第2张

免责声明:文章转载自《Go语言学习--包》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Tapestry5的注解之@InjectReact native随笔——解决navigation导航栏 android和ios样式不统一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从零开始编写自己的C#框架(12)——T4模板在逻辑层中的应用(一)(附源码)

对于T4模板很多朋友都不太熟悉,它在项目开发中,会帮我们减轻很大的工作量,提升我们的开发效率,减少出错概率。所以学好T4模板的应用,对于开发人员来说是非常重要的。   园子里对于T4模板的介绍与资料已经太多了,所以在这里我就不再详细讲述基础知识了,只是说说T4模板在本框架中的具体应用与实践。   一、创建逻辑层项目         二、添加引用      ...

使用VsCode的Rest Client进行请求测试

平时工作使用VSCode进行request的提交和测试 =>{按照Rest Client 可以很轻松的帮助我们完成代码的调试,而且能帮我们编译成各种语言的代码使用(Generate Code Snippet)} 如下表:我是用了Get请求,然后Shift+Ctrl+P进入VsCode的命令行,然后选择 Rest Client:Generate Cod...

Android混淆

一、为什么要混淆 为了避免apk在发布后被用户通过反编译拿到源代码和资源文件,然后修改资源和代码之后就变成一个新的apk。而经过混淆后的APK,即使被反编译,也难以阅读,注意混淆不是让apk不能阅读,而是加大阅读的难度,为了避免劳动成果被窃取,也避免出现安全漏洞和隐患,所以在apk发布之前一定要进行混淆。 二、混淆的原理 Java是一种跨平台、解释型语言...

关于常用 软件授权 Licence说明

BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的B...

如何在ubuntu下安装xampp

安装前置工作,到这里下载xampp for Linux。下载后,把它放在你的主文件夹中,比如我的是“root@ubuntu:/home/roy”,也就是我的主文件夹。路径不对,执行下面程序时会提示你错误的哦,比如提示“没有那个文件或目录”什么的。大家都是明白人。1、首先主面板下搜索“终端”,或者你可以直接按下Ctrl+Alt+T,启动终端。 2、进入终端...

.NetCore自定义WebAPI返回Json的格式大小写的三种方式

.NetCore的Controller/WebAPI可以帮我们将返回结果自动转换为Json格式给前台,而且可以自由设定格式(大写、小写、首字母大写等),我总结了三种方法,对应三种灵活度,供大家参考 (一)通过Startup.cs设置项目级别的格式   在项目Startup.cs中增加如下配置: services.AddMvc().AddJsonOption...