Go 语言学习之包

简介: Go 语言学习之包

01

概念


在 Go 语言中,包由一个或多个保存在同一目录的源码文件组成,包名与目录名无关,但是通常大家习惯包名和目录名保持一致。同一目录的源码文件必须使用相同的包名。


包的用途类似于其他语言的命名空间,可以限制成员的作用域和访问权限。无论是否在同一源码文件的成员,只要在同一个包内,成员均可被访问。但是只有首字母大写的成员为导出成员,可以在包外访问。


除了基于首字母大小写控制访问权限,在 Go 语言中,还可以使用内部包机制来控制访问权限,内部包源码文件存放于包目录的子目录,内部包源码文件的导出成员仅能被其父目录下的包访问。


02

包声明


在 Go 语言中,每一个源码文件开头都必须使用关键字 package 进行包声明(定义包名)。主要目的是限制包内成员的作用域和访问权限,也是当前包被其他包导入时的标识符。包名是导入路径的最后一段,所以不同导入路径的包名可以相同。


03

包导入


  • 导入路径
    Go 语言中的每一个包都是通过唯一的字符串进行标识,称为导入路径。

  • 导入声明
    在 Go 源码文件中,可以在 package 包声明后面导入一个或多个包,每一个导入的包可以单独使用关键字 import 指定一个导入路径,也可以使用圆括号括起来一组导入路径,使用关键字 import 一次导入多个包,通常大家更喜欢使用第二种方式。
    如果在同一个包中导入两个相同包名的包,需要至少为其中一个包起别名来避免冲突,别名仅对当前源码文件有效。有时别名也不止用于避免包名冲突,对于一些较长的包名,为了方便使用,通常也会定义一个短别名。


  • 空白导入
    如果导入的包,在源码中没有使用该包名,编译时就会产生错误。但在实际项目开发中,有时我们仅需要使用一个包中的变量和执行它的 init 函数,为了避免此类情况导致的编译错误,我们可以在导入路径前面使用空白标识符 “_” 。


04

包创建


在创建一个包时,尽量使用简短的包名,但是要尽可能保持包名的可读性和无歧义,如果需要用到与 go 关键字同名的包名,一般采用其复数形式。





目录
相关文章
|
3月前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
2月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
141 4
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
163 1
|
3月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
287 1
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
373 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
238 0
|
4月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
213 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
310 0