GO语言包相关总结 -引用(本地和远程),自定义,安装,使用

news2024/9/20 7:59:32

本篇文章总结以下go语言包相关的知识。

目录

一.导入包

(1)常规导入

(2)别名导入

(3)特殊导入

二.自定义包

三.安装自定义包

四.调用自定义包调用

五.获取远程包

六.go中的保留函数

七.实战 - Gin框架使用

1.安装

2.使用


一.导入包

(1)常规导入

例如:
import (
    "main/controller"
    "net/http"

    "github.com/gin-gonic/gin"
)
针对本地包:编译器会根据指定的相对路径去搜索包然后导入,相对路径
是从GOROOT或GOPATH下的src开始搜索的。
例如:go安装目录GOROOT为/usr/local/go,GOPATH环境变量为~/work:~/code,则搜索net/http和main/controller按照如下顺序进行
/usr/local/go/main/controller
~/work/main/controller
~/code/main/controller
导入包后就可以使用包中的属性。通过包名.属性的方式即可。例如fmt包中Println函数:fmt.Println。

(2)别名导入

例如同时需要导入:network/convert包和file/convert包,调用时convert.FUNC()如何区分呢?
答案是为导入的包添加一个名称属性,为包设置一个别名。例如
import {
    nconvert "network/convert"
    fconvert "file/convert"
}
nconvert.FUNC() 和 fconvert.FUNC()即可区分

(3)特殊导入

如果不想在访问包属性的时候加上包名,则import导入的时候,可以为其设置特殊的别名:点(.)
例如:
import (
    ."fmt"
)
引用时Println即可,不能使用fmt.Println
go要求import导入的包必须在后续中使用,否则会报错。如果要避免这个错误,可以在包的前面加上下划线,例如
import {
    "fmt"
    _ "net/http"
    "mypkg"
}
如上在当前包中就可以不使用net/http包。其实这也是给包重命名。只不过命名为"_",而这个符号表示丢弃复制结果,使其成为一个匿名包。
匿名包并非多此一举,因为导入匿名包时,会进行一些初始化操作(例如init()函数),如果这个初始化操作影响当前包,name这个匿名包就是有意义的。

二.自定义包

(1)在目录$GOPATH/src或者$GOROOT/src下创建目录(目录名称一般是包名)
mkdir main/ypackage
注意:一般建议package的名称和目录名保持一致。
(2)创建go源文件
touch sqrt.go
内容如下
package mypackage

import "fmt"

func Hello() {
    fmt.Println("Hello World !")
}

func Sqrt(x float64) float64 {
    z := 0.0
    for i := 0; i < 1000; i++ {
        z -= (z*z - x) / (2 * x)
    }
    return z
}


三.安装自定义包

任意目录执行: go install main/mypackage
进入如下目录查看安装结果
cd $GOROOT
./pkg/linux_amd64/main/mypackage.a

四.调用自定义包调用

test.go文件,内容如下:
package main

import (
    "fmt"
    "main/mypackage"
)

func main() {
    fmt.Println("start ...")
    mypackage.Hello()
    fmt.Println(mypackage.Sqrt(16))
}

go build test.go 
./test

 

五.获取远程包

go语言有一个获取远程包的工具go get,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad)
命令:
go get github.com/gin-gonic/gin
go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包
命令:
go get -u github.com/gin-gonic/gin
通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具。
通过上面获取的代码在我们本地的源码相应的代码结构如下

$GOPATH
  src
   |--github.com
          |-gin-gonic
              |-gin
   pkg
    |--相应平台
         |-github.com
               |--gin-gonic
                    |gin.a
go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行go install

远程包的调用
在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以

import "github.com/gin-gonic/gin"
提醒:bin目录下面存的是编译之后可执行的文件,pkg下面存放的是应用包,src下面保存的是应用源代码。

六.go中的保留函数

       Go中除了main()函数外,还保留了init()函数,这两个函数都不能有任何参数和返回值。它们都是在特定的时候自动调用的,无需我们手动执行。
每个包中都可以定义init函数,甚至可以定义多个,但建议每个包只定义一个。每次导入包,在导入完成后,且变量,常量等声明并初始化完成后,将会调用这个包中的init()函数
对于main包,如果也定义了init,那么它会在main()函数之前执行。当main包中的init()执行完之后,就会立即执行main()含住,然后进入主程序。

七.实战 - Gin框架使用

       Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者, 你会爱上 Gin.

1.安装

要安装 Gin 软件包,需要先安装 Go 并设置 Go 工作区。
(1)下载并安装 gin
go get -u github.com/gin-gonic/gin
(2)gin 引入
import "github.com/gin-gonic/gin"
(3)(可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:
import "net/http"

2.使用

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    // 返回一个json数据
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    
    // 返回一个html页面
    r.LoadHTMLGlob("templates/*")
    r.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK, "index.html",nil)
    })
    r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

代码结构:

运行结果: 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试实战篇(12),一文学完,Pytest 常用11种第三方插件

这些是之前的文章&#xff0c;里面有一些基础的知识点在前面由于前面已经有写过&#xff0c;所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇&#xff08;1&#xff09; Python自动化测试实战篇&#xff08;2&#xff09; Python自动化测试实战篇&#xff…

解决python-opencv:(-215:Assertion failed) _img.empty() in function ‘cv::imwrite‘在将视频分成帧图片,写入时出现的问题

最近在搞视频检测问题&#xff0c;在用到将视频分帧保存为图片时&#xff0c;图片可以保存&#xff0c;但是会出现(-215:Assertion failed) !_img.empty() in function cv::imwrite问题而不能正常运行&#xff0c;在检查代码、检查路径等措施均无果后&#xff0c;了解了视频分帧…

rk3399 调试ap6354

电路如下: wifi&#xff1a; 按照rk3399 sdk默认配置&#xff0c;修改相应的引脚 sdio_pwrseq: sdio-pwrseq { compatible "mmc-pwrseq-simple"; clocks <&rk808 1>; clock-names "ext_clock"; pinctrl-nam…

filter功能演示-鉴权、声明缓存

文章目录 Filter定义工作原理Filter所处环节 Demo示例总结 Filter定义 在Java EE&#xff08;Java Platform, Enterprise Edition&#xff09;中&#xff0c;过滤器&#xff08;Filter&#xff09;是一种强大的组件&#xff0c;用于在Web应用程序中拦截和处理传入的请求和响应…

银河麒麟服务器V10 SP1 .Net6.0 开机自启动

开机自动启动&#xff0c;折腾了一小天&#xff0c;设置/etc/init.d/ 、update-rc.d&#xff0c;可能刚开始用&#xff0c;经验不多吧&#xff0c;尝试多种方式我的服务怎么都启动不起来&#xff0c;根据之前nginx和redis的自动启动经验&#xff0c;使用systemd管理服务&#x…

Unity基础 物理系统 刚体组件下的移动.碰撞.触发检测

当在Unity中创建游戏或应用程序时&#xff0c;重力系统是一个非常重要的组成部分。它可以模拟物体受到地球引力的影响&#xff0c;并产生逼真的物理效果。在Unity中&#xff0c;我们可以使用刚体组件和重力向量来控制重力系统。 首先&#xff0c;在Unity中创建一个物体&#xf…

数据表示与数据编码

数据表示与数据编码 数据表示 bit:二进制位 例如:480Mbps(Mb/s) 小写字母b代表bitbyte:字节 1byte8bit 使用大写字母B表示 byte最初从IBM360中开始表示word:字长 在32bit计算机中一个字长为32位&#xff0c;在64bit计算机中一个字长为64位 最早的微处理器字长为4位 章节学习内…

Windows的基本操作

Windows的基本操作 一、用户管理1.1、用户帐户1.2、用户管理 二、网络配置2.1、配置和查看命令 三、常用命令 一、用户管理 1.1、用户帐户 系统中的一种对象&#xff08;用户、组、计算机&#xff09;包含多种属性&#xff0c;如用户名、密码等不同用户帐户的用户名和密码等一…

插入排序--直接插入排序,折半插入排序,希尔排序

插入排序是一种简单直观的排序方法&#xff0c;其基本思想是每次将一个待排序的记录按其关键词大小插入前面已经排好的子序列&#xff0c;直到全部记录插入完成。 一&#xff0c;直接插入排序&#xff1a;从小到大排序 数组序号01234567待排序列4938659776132749第一轮384965…

【数据算法与结构】用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目

题目&#xff1a; Qestion: 用按层次顺序遍历二叉树的方法&#xff0c;统计树中具有度为1的结点数目。 数据结构定义 typedef struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right; } TreeNode;样例二叉树的形状 核心代码 // 统计具有度为1的节点数目的…

解决idea默认配置maven仓库地址的问题

我的maven配置地址 一直没注意 jar包什么的全部都是C盘默认的路径&#xff0c;导入项目更改后&#xff0c;再次导入项目 路径还是会变成C盘的路径&#xff1b; 上网搜索找到了解决的办法&#xff1b; 一、File——>New Projects Setup ———>Settings for New Projects…

React hooks之useCallback的使用与性能分析

使用useCallback优化代码 useCallback是对传过来的回调函数优化&#xff0c;返回的是一个函数&#xff1b;useMemo返回值可以是任何&#xff0c;函数&#xff0c;对象等都可以。 简单来说就是返回一个函数&#xff0c;只有在依赖项发生变化的时候才会更新&#xff08;返回一个…

vue项目打包后如何本都部署访问

npm run build生成dist项目后&#xff0c;在windows部署访问。 方式一&#xff1a; 1、新建一个文件夹 进入目录后打开cmd 输入npm init -y 2、输入 npm i express -s 是用于在 Node.js 项目中安装 Express 框架的命令 3、.将项目打包好的dist文件放入其中以及新建一个app.js文…

C++ 二叉搜索树

1. 内容安排说明 二叉树在前面 C 数据结构阶段已经讲过&#xff0c;本节取名二叉树进阶是因为&#xff1a; 1. map 和 set 特性需要 先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构 2. 二叉搜索树的特性了解&#xff0c;有助于更好的理解 map 和 set 的特性 …

在JDK17尝鲜Flink1.17

在JDK17尝鲜Flink1.17 前言 还没玩明白老版本&#xff0c;Flink1.17就来了&#xff01;&#xff01;&#xff01;总还是要向前看的。。。 根据官网文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/try-flink/local_installation/ Flink r…

【Excel技巧】如何将一堆文字快速整理成一列表格数据?

在平时的工作中&#xff0c;我们有时候需要把很多零散的分布的内容&#xff08;比如姓名&#xff09;&#xff0c;复制到Excel工作表的单元格内&#xff0c;变成一列。如果一个个复制粘贴&#xff0c;显然太过繁琐。 如何批量快速的完成这一操作呢&#xff1f;只需要下面简单几…

关于排查springboot启动时页面出现404

今天在进行开发时&#xff0c;Contronller代码没有问题&#xff0c;前端html也没问题&#xff0c;发现当浏览器输入localhost:8080时404&#xff0c;于是进行排查发现&#xff0c;SpringbootWebApplication文件放到了子目录下。 springboot的启动文件必须放在父目录下才可以检测…

【Git原理与使用】-- 远程操作

目录​​​​​​​ 理解分布式版本控制系统 远程仓库 新建远程仓库 lssue 与 Pull Request模板文件 知识铺垫 lssue 模板文件 Pull Request模板文件 克隆远程仓库 使用 HTTPS 方式 使用 SSH 方式 第一步&#xff1a;创建SSH Key 向远程仓库推送 过程梳理 实操 …

Java安全——安全提供者

Java安全 安全提供者 在Java中&#xff0c;安全提供者&#xff08;Security Provider&#xff09;是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准…

vue中使用Drawflow连线插件,并对端口进行命名

效果如图 场景:项目中需要拖拽模块并连线,有输入端和输出端之分,不同模块不同端口才能相连 文档相关 点击前往------->原项目git地址 点击前往------->提供端口既可输出又可输出方案 点击前往----->查阅发现原项目无法对端口命名 public文件夹下创建drawflow文件夹…