现今即便是个人开发的一般程序,其包含的函数,这些函数代码一般都有他人编写并打包为包或者模块的形式,并通过相关社区并发,最后有软件通过调用这些包或者模块的函数来更高效的完成开发。通过包或者模块的形式重用代码使得编程开发变得轻松

go语言包,fmt  os等这样具有常用功能的内置包在go语言中一百多个,我们称为标准库,这些标准包大部分都内置到go语言本身

   大部分编程语言都存在包的概念,而任何一种包设计的目的都是为了简化大型软件设计和维修工作 ,实际上包是函数和数据的集合。通过吧一组有关特性的函数和数据放进一个单元中,方便使用和更新相应的模块。这种包系统的设计使得每一个模块包都与程序,其他单元保持一定的独立性。

在编写代码的过程中,不同模块中间为了实现某一个类似的功能可能会采用相同的名字去命名一个函数,如果一个软件开发过程中需要同事使用两个包,就会在调函数时产生歧义。为了解决这个问题,go语言引入了命名空间的概念,让每个包都定义一个命名空间,用于内部标识符的访问,因为每个命名空间关联一个特定的包,这使得我们在调用类型,函数时有了独一无二的简短明了的名字。

为了提高包的独立性以及安全性,go语言的包可以通过控制包内名字的可见性来实现包的封装,通过限制包成员的可见性,隐藏具体的实现过程可以极大提高软件的安全性,同时开发人员调用时也不必关心其实现过程,直接使用包的api,另一个方面也允许包的维护者在不影响包的用户使用的前提下调整包的内部实现,通过限定包内函数与变量的可见性约束用户操作,只允许用户通过特定的函数来访问和控制包内部的变量,这样不仅可以提高安全性还可以保持并发操作是的互斥约束

 与大部分编译类似,go语言中,当改动了一个源文件时,就必须重新编译该源文件