go包管理的具体实现

 更新时间:2025年06月12日 11:00:04   作者:终身学习基地  
本文主要介绍了go包管理的具体实现,包括包定义、自定义包路径、init函数作用、导入方式及Go Modules配置,感兴趣的可以了解一下

一、包管理

1 包

即模块,组织go源代码,提供了更好的可重用性和可用性。

每个文件中第一行是package packagename,代表指定了该文件属于那个包。

go语言中,同一层级的文件属于一个包,比如第一层级package main,如果新定义一个demo文件夹,在其中的文件中书写package main(虽然都叫main包,但是不是同一个包),在第一层级的package main中引用demo文件下的main包,是属于main.函数名的形式。【原理是这样,但是这样写会报错😂】

2 自定义包

  • go语言的代码必须放在gopath的src路径下;
  • 包导入是从gopath的src路径下开始检索(开始找)【并非是在该项目下查找】;
  • 除了main包以外,建议包名就叫文件夹名,一个文件夹下的包名必须一致【也可以包名叫mypackage,其中所有文件中第一行是package test】;
  • 同一个包下,变量,函数只能定义一次【在包中的变量声明,全局变量不能使用a:=10,这种类型,必须使用全定义或者半定义】;
  • 同一个包下的变量和函数可以直接相互使用【可以把包想象为是一整个大的文件】;
  • 包内的函数或变量,想让外部包使用,必须首字母大写;
package myPackage  // 包内的变量、函数想让外部使用,必须首字母大写
var Name = "yangyi"
var Age = 18

// 导入使用
package main

import (
    "day01/myPackage"  // 自动进行包的导入
    "fmt"
) // 内置包

func main() {
    fmt.Println(myPackage.Name)  
}

import test "day01/myPackage"  == python中的 import ... as ...

Java中可以使用public private等关键字来对外界使用进行限制。【可以使用public static将类封装成工具类】

以后下的第三方包都是放在gopath的src路径下【编译的时候,也就是将第三方包的函数也编译到可执行文件中】

3 init函数(特殊函数)

可以在包内的文件中书写init函数。

// mypackage包中
package mypackage

import "fmt"

// 特殊函数,初始化函数,在导包的时候就会执行,并且可以定义多个
// 用处: 初始化工作【每次导入包,执行这个函数】
func init() {
    fmt.Println("我是init函数...")
}

func init1(){
    fmt.Println("我是init函数...")
}

main 包也是会执行init函数,进行初始化。

4 包导入的几种方式

  • import "day02/mypackage"
  • import 名字 "day02/mypackage" 包重命名
    • 使用方式: 名字.变量/函数
  • import _ "day02/mypackage"包只导入,不使用

5 go mod模式创建项目

go语言有go mod;python中有虚拟环境;Java中有maven;

go语言没有一个统一包管理的地址,大家都放到github上。【由于之前下载的包,都会放到src路径的github.com下,所以,无法实现一个多版本的控制】【哈哈】

1.11版本推出go modules机制,简称mod。

set GO111MODULE=on  // windows 将mod开启
set GO111MODULE=off  // 将mod关闭
export GO111MODULE=on  // linux

创建go mod的两种方式:

// 第一种:
1 新建一个项目文件夹,如day01项目
2 进入文件夹,打开cmd,输入 go mod init day01,会生成 go.mod文件(该项目名 该项目依赖的go的版本,第三方包版本)

// 下载beego
go get github.com/astaxie/beego

如果没有go mod,之前会在src路径的github.com路径下安装;有go mod之后,会在pkg的路径下进行存放。【之后进行第三方包的寻找,不是基于src路径寻找,而是基于go mod配置的路径进行寻找】

PS:自己写的包放在项目中,go sdk就是go的安装路径,如果有go mod,第三方包就是pkg路径下的。

我们这里需要配置代理,如果不进行配置的话。【速度慢到无法想象】

package main

import (
    "github.com/astaxie/beego"
) // 内置包

func main() {
    beego.Run()  // 启动beego即可
}

可以把go mod文件直接拷贝给别人,别人直接使用go mod download就可以安装第三方包。

到此这篇关于go包管理的具体实现的文章就介绍到这了,更多相关go包管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速掌握Go语言正/反向代理

    快速掌握Go语言正/反向代理

    这篇文章主要介绍了快速掌握Go语言正/反向代理的相关资料,需要的朋友可以参考下
    2022-11-11
  • Go语言单线程运行也会有的并发问题解析

    Go语言单线程运行也会有的并发问题解析

    这篇文章主要为大家介绍了Go语言单线程运行的并发问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言接口的嵌套的具体使用

    Go语言接口的嵌套的具体使用

    在Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口,本文主要介绍了Go语言接口的嵌套的具体使用,感兴趣的可以了解一下
    2023-04-04
  • goroutine 泄漏和避免泄漏实战示例

    goroutine 泄漏和避免泄漏实战示例

    这篇文章主要为大家介绍了goroutine 泄漏和避免泄漏实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权详解

    Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权详解

    最近项目中需要用到鉴权机制,golang中jwt可以用,这篇文章主要给大家介绍了关于Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权的相关资料,需要的朋友可以参考下
    2022-09-09
  • Go语言context上下文管理的使用

    Go语言context上下文管理的使用

    本文主要介绍了Go语言context上下文管理的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Golang channle管道的基本使用及快速入门

    Golang channle管道的基本使用及快速入门

    管道是Go语言中实现并发的一种方式,它可以在多个goroutine之间进行通信和数据交换,本文主要介绍了Golang channle管道的基本使用及快速入门,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 源码解析gtoken替换jwt实现sso登录

    源码解析gtoken替换jwt实现sso登录

    这篇文章主要为大家介绍了源码解析gtoken替换jwt实现sso登录的示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang协程池设计详解

    golang协程池设计详解

    这篇文章主要介绍了golang协程池设计详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Golang应用程序性能优化技巧分享

    Golang应用程序性能优化技巧分享

    随着科技的进步,人人都想要快速的应用,这就需要优化您的应用程序性能。本文为大家整理了一些Golang应用程序性能优化的技巧,希望对大家有所帮助
    2023-04-04

最新评论