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

news/2024/4/19 5:18:04/文章来源:https://blog.csdn.net/hsy12342611/article/details/131523455

本篇文章总结以下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.luyixian.cn/news_show_325638.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习技术(二)——Python科学运算模块(Numpy、Pandas)

机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09; 文章目录 机器学习技术&#xff08;二&#xff09;——Python科学运算模块&#xff08;Numpy、Pandas&#xff09;一、Numpy1、介绍、安装与导入2、Numpy常用操作 二、Pan…

mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】

文章目录 1.问题描述2.问题场景模拟再现2.1 场景环境2.2 数据库与表创建2.3 Maven环境搭建&#x1f340; pom.xml导入依赖&#x1f340; jdbc.properties&#x1f340; mybatis-config.xml&#x1f340; User实体类&#x1f340; Mapper 接口&#x1f340; UserMapper.xml 映射…

IT-OT 安全融合是优化风险管理的关键

最新报告揭示了运营技术检测和响应方面的显着可见性差距。 全球网络安全运营商趋势科技宣布了一项新研究&#xff0c;显示企业安全运营中心 (SOC) 正在将其能力扩展到 OT 领域。 然而&#xff0c;重大的可见性和技能相关的挑战仍然造成障碍。 研究发现&#xff0c;一半的组织…

决策树ID3

文章目录 题目一基础知识解题过程①算总的信息量②求解各个指标的信息增益&#xff0c;以此比较得出根节点③ 从根节点下的晴天节点出发循环上述步骤④ 从根节点下的多云节点出发&#xff0c;循环上述步骤⑤ 从根节点下的雨节点出发&#xff0c;循环上述步骤⑥画出最终的决策树…

4.设计模式之后七种模式后11种模式命令访问者迭代器发布订阅中介者忘备录解释器状态策略职责链和空模式

1.命令(command)模式 不知道命令接收者(对象)是谁,支持撤销 (接受者 间接调用执行 的具体行为) 命令调用者和接收者解耦 //只要实现命令接口即可 (就是客户端给个命令,然后命令类传给接收类执行) 优点和缺点 容易撤销操作 命令队列可以多线程操作 增加过多的命令类 空命令也是一…

揭秘元宇宙背后的最炫科技风

&#xff1a;元宇宙&#xff0c;这个词汇在近年来越来越被人们所熟知。它是一个虚拟的世界&#xff0c;由数字化的现实世界和虚拟现实技术所构成。在元宇宙中&#xff0c;人们可以自由地探索、交互、创造和享受各种虚拟体验。而这一切&#xff0c;都离不开最炫科技风的支持。 …

道路车辆功能安全第2 部分:功能安全管理

道路车辆功能安全 第2 部分&#xff1a;功能安全管理 1 范围 GB/T 34590的本部分规定了应用于汽车领域的功能安全管理的要求&#xff0c;包括&#xff1a; ——独立于项目的关于所涉及组织的要求&#xff08;整体安全管理&#xff09;&#xff1b;及 ——项目特定的在安全生命周…

Docker常见问题集合

一、Docker安装 1、yum 安装 1&#xff09;更新yum包到最新 yum update2&#xff09;安装软件需要的软件&#xff0c;yum-util&#xff08;提供 yum-config-manager 功能&#xff09;&#xff0c;device-mapper-persistent-data、lvm2&#xff08;devicemapper 驱动依赖&…

【Linux】Redis 集群部署

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Redis 集群部署 Redis 主从复制主从复制的作用主从复制的流程搭建Redis 主从复制安装 Redis修改 Redis 配置文件&#xff08;Master节点操作&#xff09;修改 Redis 配置文件…

STM32——建工程

文章目录 一、建工程步骤1. 创建一个工程文件2. 里面创建四个文件3. Lib&#xff1a;存放标准库的.c和.h文件&#xff0c;其中inc放置.h文件&#xff0c;src放置.c文件4. Startup中存放驱动文件5.User文件中包含以下路径以下文件6.创建工程Project 一、建工程步骤 以STM32F10X…

百万连接实现01:使用epoll+多线程+多IP地址管理tcp客户端集群

操作系统采用 <客户端IP : 客户端端口> : <服务端IP : 服务端端口> 四元组来标识一条TCP连接。 所以要想实现百万连接&#xff1a; 第一种是服务器端只开启一个进程&#xff0c;然后使用很多个客户端进程绑定不同的客户端 ip 来连接&#xff0c;假设 20个ip * 5w&a…

AIGC - Easy Diffusion (Stable Diffusion) 图像生成工具的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131524075 版本v2.5.41 Stable Diffusion 图像生成工具是一种基于深度学习的技术&#xff0c;可以从随机噪声中生成高质量的图像&#x…

计模式篇(Java):桥接模式

上一篇&#xff1a;计模式篇(Java)&#xff1a;适配器模式 九、桥接模式 需求示例 当我们对不同手机类型的不同品牌实现操作编程&#xff0c;如图&#xff1a; 那么它对应的类图就是 传统方式解决需求分析&#xff1a; 扩展性问题&#xff0c;如果需要在增加手机的样式&#x…

自学网络安全究竟该从何学起?

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入行…

MATLAB | 拉普拉斯分布/拉普拉斯噪声的生成

一、实验目标 生成拉普拉斯分布的噪声&#xff0c;并分析它的概率密度函数 二、解决思路 &#xff08;1&#xff09;拉普拉斯分布可以由指数分布生成 拉普拉斯的概率密度函数为 f ( x ; μ , λ ) 1 2 λ e − ∣ x − μ ∣ λ f(x;\mu,\lambda)\frac{1}{2 \lambda} e^{…

简单的手机记事本怎么把英文翻译成中文?

手机记事本是人们常用的辅助工具之一&#xff0c;在使用手机记事本记录内容的时候&#xff0c;除了我们平时使用较多的中文之外&#xff0c;也有人会记录一些英文内容。想要将手机记事本中的英文内容翻译成中文内容应该如何操作呢&#xff1f;以iPhone手机端敬业签记事本软件为…

GIS杂记(二):Arcgis对采样点进行裁剪,获取指定区域内的采样点

有时候需要对栅格数据进行采样处理&#xff0c;如果采样点过多则会使得采样时间过长&#xff0c;今天在进行数据采样时&#xff0c;使用了1km*1km的渔网建立的采样点&#xff0c;大概有1百万个点&#xff0c;程序运行时间大概4个小时&#xff0c;但是其中有绝大部分数据都是空值…

Css 基础:选择器,三大特性

1.emmet的 快速格式化代码 配置 "editor.formatOnType": true, "editor.formatOnSave": true 2.基础选择器 3.复合选择器 4.单行文本垂直居中原理 5.css背景 6.CSS三大特性 层叠性&#xff1a;相同选择器设置相同样式&#xff0c;发生在样式冲突时&#xf…

【PC】CPU与GPU

文章目录 CPU与主板CPU是什么主板是什么功能 GPU与显卡GPU是什么显卡是什么功能 CPU与GPU的关系 ALU&#xff1a; 算术单元&#xff08;Arithmetic Unit&#xff09;&#xff1a;算术单元执行基本的算术运算&#xff0c;如加法、减法、乘法和除法。它能够对整数、浮点数和定点数…

Web服务器群集:LVS+Keepalived高可用群集

目录 一、理论 1.Keepalived 2.VRRP协议&#xff08;虚拟路由冗余协议&#xff09; 3.部署LVSKeepalived 高可用群集 二、实验 1.LVSKeepalived 高可用群集 三、问题 1.备服务器网卡启动报错 四、总结 一、理论 1.Keepalived &#xff08;1&#xff09;简介 Keepal…