iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Go语言如何导入包
  • 481
分享到

Go语言如何导入包

2023-07-04 23:07:14 481人浏览 薄情痞子
摘要

这篇“Go语言如何导入包”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言如何导入包”文章吧。在Go语言中,可以通过im

这篇“Go语言如何导入包”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言如何导入包”文章吧。

在Go语言中,可以通过import语句来导入包,导入的包名使用双引号包围,包名是从GOPATH开始计算的路径,使用“/”进行路径分隔。使用import导入包有两种基本格式:1、单行导入语法“import "包1" import "包2"”;2、多行导入语法“import("包1" "包2" …)”。

Go语言import导入包——在代码中使用其他的代码

可以在一个 Go语言源文件包声明语句之后,其它非导入声明语句之前,包含零到多个导入包声明语句。每个导入声明可以单独指定一个导入路径,也可以通过圆括号同时导入多个导入路径。要引用其他包的标识符,可以使用 import 关键字,导入的包名使用双引号包围,包名是从 GOPATH 开始计算的路径,使用/进行路径分隔。

默认导入的写法

导入有两种基本格式,即单行导入和多行导入,两种导入方法的导入代码效果是一致的。

1) 单行导入

单行导入格式如下:

import "包1"import "包2"

2) 多行导入

当多行导入时,包名在 import 中的顺序不影响导入效果,格式如下:

import(    "包1"    "包2"    …)

导入包后自定义引用的包名

如果我们想同时导入两个有着名字相同的包,例如 math/rand 包和 crypto/rand 包,那么导入声明必须至少为一个同名包指定一个新的包名以避免冲突。这叫做导入包的重命名。

import (    "crypto/rand"    mrand "math/rand" // 将名称替换为mrand避免冲突)

导入包的重命名只影响当前的源文件。其它的源文件如果导入了相同的包,可以用导入包原本默认的名字或重命名为另一个完全不同的名字。

导入包重命名是一个有用的特性,它不仅仅只是为了解决名字冲突。如果导入的一个包名很笨重,特别是在一些自动生成的代码中,这时候用一个简短名称会更方便。选择用简短名称重命名导入包时候最好统一,以避免包名混乱。选择另一个包名称还可以帮助避免和本地普通变量名产生冲突。例如,如果文件中已经有了一个名为 path 的变量,那么我们可以将"path"标准包重命名为 pathpkg。

每个导入声明语句都明确指定了当前包和被导入包之间的依赖关系。如果遇到包循环导入的情况,Go语言的构建工具将报告错误。

匿名导入包——只导入包但不使用包内类型和数值

如果只希望导入包,而不使用任何包内的结构和类型,也不调用包内的任何函数时,可以使用匿名导入包,格式如下:

import (    _ "path/to/package")

其中,path/to/package 表示要导入的包名,下画线_表示匿名导入包。

匿名导入的包与其他方式导入包一样会让导入包编译到可执行文件中,同时,导入包也会触发 init() 函数调用。

包在程序启动前的初始化入口:init

在某些需求的设计上需要在程序启动时统一调用程序引用到的所有包的初始化函数,如果需要通过开发者手动调用这些初始化函数,那么这个过程可能会发生错误或者遗漏。我们希望在被引用的包内部,由包的编写者获得代码启动的通知,在程序启动时做一些自己包内代码的初始化工作。

例如,为了提高数学库计算三角函数的执行效率,可以在程序启动时,将三角函数的值提前在内存中建成索引表,外部程序通过查表的方式迅速获得三角函数的值。但是三角函数索引表的初始化函数的调用不希望由每一个外部使用三角函数的开发者调用,如果在三角函数的包内有一个机制可以告诉三角函数包程序何时启动,那么就可以解决初始化的问题。

Go 语言为以上问题提供了一个非常方便的特性:init() 函数。

init() 函数的特性如下:

  • 每个源码可以使用 1 个 init() 函数。

  • init() 函数会在程序执行前(main() 函数执行前)被自动调用。

  • 调用顺序为 main() 中引用的包,以深度优先顺序初始化。

例如,假设有这样的包引用关系:main→A→B→C,那么这些包的 init() 函数调用顺序为:

C.init→B.init→A.init→main

说明:

  • 同一个包中的多个 init() 函数的调用顺序不可预期。

  • init() 函数不能被其他函数调用。

理解包导入后的init()函数初始化顺序

Go 语言包会从 main 包开始检查其引用的所有包,每个包也可能包含其他的包。Go 编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码。

在运行时,被最后导入的包会最先初始化并调用 init() 函数。

通过下面的代码理解包的初始化顺序。

代码8-3 包导入初始化顺序入口(…/chapter08/pkginit/main.go)

package mainimport "chapter08/code8-2/pkg1"func main() {    pkg1.ExecPkg1()}

代码说明如下:

  • 第 3 行,导入 pkg1 包。

  • 第 7 行,调用 pkg1 包的 ExecPkg1() 函数。

代码8-4 包导入初始化顺序pkg1(…/chapter08/pkginit/pkg1/pkg1.go)

package pkg1import (    "chapter08/code8-2/pkg2"    "fmt")func ExecPkg1() {    fmt.Println("ExecPkg1")    pkg2.ExecPkg2()}func init() {    fmt.Println("pkg1 init")}

代码说明如下:

  • 第 4 行,导入 pkg2 包。

  • 第 8 行,声明 ExecPkg1() 函数。

  • 第 12 行,调用 pkg2 包的 ExecPkg2() 函数。

  • 第 15 行,在 pkg1 包初始化时,打印 pkg1 init。

代码8-5 包导入初始化顺序pkg2(…/chapter08/pkginit/pkg2/pkg2.go)

package pkg2import "fmt"func ExecPkg2() {    fmt.Println("ExecPkg2")}func init() {    fmt.Println("pkg2 init")}

代码说明如下:

  • 第 5 行,声明 ExecPkg2() 函数。

  • 第 10 行,在 pkg2 包初始化时,打印 pkg2 init。

执行代码,输出如下:

pkg2 initpkg1 initExecPkg1ExecPkg2

以上就是关于“Go语言如何导入包”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Go语言如何导入包

本文链接: https://www.lsjlt.com/news/348390.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言如何导入包
    这篇“Go语言如何导入包”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言如何导入包”文章吧。在Go语言中,可以通过im...
    99+
    2023-07-04
  • go语言如何导包
    这篇文章主要介绍“go语言如何导包”,在日常操作中,相信很多人在go语言如何导包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言如何导包”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!在go语言中,可...
    99+
    2023-07-04
  • go语言怎么导包
    在go语言中,可以使用import关键字来导包,导入的包名需使用双引号包围,包名是从GOPATH开始计算的路径,使用“/”进行路径分隔。go语言导包有两种基本格式:1、单行导入,语法“import "包名"”;2、多行导...
    99+
    2023-05-14
    Go Golang go语言
  • Go语言中包的导入规范详解
    Go 语言中包的导入规范详解 在 Go 语言中,包(package)是代码的组织单元,用于组织和管理代码。通过包的导入,我们可以在代码中引用其他包提供的功能和类型。在 Go 中,包的导...
    99+
    2024-03-12
    规范 导入 go语言 标准库
  • Go语言包管理技巧:优化导入方式
    在Go语言开发中,包管理是一个非常重要的环节。合理优化包的导入方式可以提高代码的可读性、可维护性和性能。本文将介绍一些Go语言包管理的技巧,特别是优化导入方式的方法,并提供一些具体的代...
    99+
    2024-03-12
    优化 go语言 包管理 标准库
  • go中如何导入本地包?
    在Go语言中,要导入本地包可以通过使用相对或绝对路径的方式进行。首先,确保你的本地包已经按照Go语言的规范进行了目录结构的组织。然后,在你的Go文件中,使用import关键字导入包的路...
    99+
    2024-02-11
    go语言
  • 导包大全:Go语言中常用包引入方法总结
    导包大全:Go语言中常用包引入方法总结 在Go语言中,包的引入是非常重要的一部分。通过引入不同的包,我们可以实现各种功能,提高代码复用性和可维护性。在本文中,我们将总结一些常用的包引入...
    99+
    2024-04-02
  • Go语言中包的导入方式及注意事项
    标题:Go语言中包的导入方式及注意事项 Go语言是一种开源的静态类型编程语言,由Google开发,主要用于构建高性能的网络服务和分布式系统。在Go语言中,包的导入是一项非常重要的操作,...
    99+
    2024-03-12
    注意事项 包管理 导入规则 go语言 编译错误
  • Go语言包如何使用
    本篇内容介绍了“Go语言包如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!包(package)是多个Go源码的集合,是一种高级的代码复...
    99+
    2023-07-04
  • 深入探讨Go语言导包机制与最佳实践
    Go语言是一种简洁、高效、强大的编程语言,在近年来逐渐备受开发者的青睐。其中,Go语言的导包机制是其具有特色的一部分,良好的导包机制可以使代码结构清晰、模块化,同时也能提高代码的可读性...
    99+
    2024-04-02
  • 了解Go语言包管理及导入的基础知识
    标题:深入了解Go语言包管理及导入的基础知识 在学习和使用Go语言时,包管理及包导入是非常基础且重要的知识点。本文将从基础开始介绍Go语言的包管理和导入,同时会提供具体的代码示例来帮助...
    99+
    2024-03-12
    go语言 导入 包管理
  • 深入理解Go语言包依赖
    go 语言的包依赖基于模块概念,通过 go mod 命令管理依赖。最佳实践包括使用清晰的模块路径、指定依赖版本、使用依赖锁定和优先使用标准库。实战案例说明了如何通过 go get 命令下...
    99+
    2024-04-04
    go语言 包依赖 标准库
  • go语言如何处理TCP拆包/粘包
    这篇文章主要讲解了“go语言如何处理TCP拆包/粘包”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言如何处理TCP拆包/粘包”吧!part 1最近在学习go自带的rpc,看完了一遍想着...
    99+
    2023-06-22
  • Go语言中flag包如何使用
    今天就跟大家聊聊有关Go语言中flag包如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这一章所学的任何代码,都要编译成.exe才能跑,禁止右...
    99+
    2024-04-02
  • 如何入门Go语言开发?
    如何入门Go语言开发? Go语言(又称Golang)是一种由Google开发的开源编程语言,它具有快速编译、静态类型、并发编程等特点,适用于开发高性能的后端服务、网络应用、云计算等领域...
    99+
    2024-04-02
  • 如何从 Go Multi Module 存储库正确导入 GO 包?
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何从 Go Multi Module 存储库正确导入 GO 包?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者...
    99+
    2024-04-05
  • Go 语言入门学习之时间包
    目录1.前言2.日期和时间的表示当前时间日期函数如何在Golang中获取当前UNIX的时间戳3.访问时间组件的方法1.前言 时间和日期对于任何编程语言来说都是一个非常重要的包。 GO...
    99+
    2024-04-02
  • Go语言中怎么导入第三方库
    Go语言中怎么导入第三方库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。环境变量首先回想一下,我们安装goland的时候,设置了几个比较重要的环境变量,也就是G...
    99+
    2023-06-20
  • jar包如何导入eclipse
    将jar包导入Eclipse的方法如下:1. 打开Eclipse,选择要导入jar包的工程。2. 右键点击工程名,选择 "Prope...
    99+
    2023-08-25
    jar eclipse
  • Python如何导入socket包
    在Python中,要导入socket包,可以使用以下代码:```pythonimport socket```这行代码将会导入Pyth...
    99+
    2023-10-10
    python socket
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作