Golang项目引入第三方依赖库

news2024/11/26 4:50:59

基本目录

 

第一步:

初始化依赖,切换到项目根目录下面,执行一下命令,g6 为 module 的名称

go mod init g6

生成 go.mod 文件

module g6
go 1.20

将来我们项目的所有依赖都会依赖于 g6

第二步:

引入第三方依赖 "github.com/bytedance/sonic"

package main

import (
	"fmt"
	"g6/util"
	math "g6/util/math"
	"github.com/bytedance/sonic"
)

func main() {
	a, b, c := 1, 2, 3
	fmt.Println(util.Name)
	fmt.Println(util.Add(a, b))
	fmt.Println(math.Add(a, b, c))
	bytes, _ := sonic.Marshal("hello")
	fmt.Println(string(bytes))
}

第三步:

把第三方库引入到 go.mod 里面去,在终端运行以下命令

第一种方式:

go get github.com/bytedance/sonic

第二种方式:(自动添加/删除 import 中引入的/未使用的第三方依赖包)

go mod tidy

go.mod 中会多个 require (...), 并生成 go.sum 文件

 引入成功,可执行

go run d.go

初始化函数 init(){},一个包下面可以有多个 init 函数,甚至一个文件下 也可以有多个 init 函数

b.go

package maths

import "fmt"

func sub(a, b int) int {
	return a - b
}

// init 函数在一个包里面可以出现多次
func init() {
	fmt.Println("init maths package 1")
}

func init() {
	fmt.Println("init maths package 2")
}

a.go

package util

import "fmt"

var (
	Name = "大脸猫"
)

func Add(a, b int) int {
	return a + b
}

func init() {
	fmt.Println("init maths package")
}

d.go

package main

import (
	"fmt"
	"g6/util"
	math "g6/util/math"

	"github.com/bytedance/sonic"
)

func main() {
	a, b, c := 1, 2, 3
	fmt.Println(util.Name)
	fmt.Println(util.Add(a, b))
	fmt.Println(math.Add(a, b, c))
	// fmt.Println(math.sub(6, 3)) // 报错:.\d.go:16:19: sub not exported by package maths
	bytes, _ := sonic.Marshal("hello")
	fmt.Println(string(bytes))
}

运行结果如下

因为 g6/util 包线引入,所以先执行 a.go 中的 init 函数,init 函数在 d.go的main函数执行之前执行

引用了包,但可以不使用,仅执行引入包的 init 函数,如下仅执 g6/util 包下的 init 函数

package main

import (
	"fmt"
	_ "g6/util"
	math "g6/util/math"

	"github.com/bytedance/sonic"
)

func main() {
	a, b, c := 1, 2, 3
	// fmt.Println(util.Name)
	// fmt.Println(util.Add(a, b))
	fmt.Println(math.Add(a, b, c))
	// fmt.Println(math.sub(6, 3)) // 报错:.\d.go:16:19: sub not exported by package maths
	bytes, _ := sonic.Marshal("hello")
	fmt.Println(string(bytes))
}

 

 

 

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

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

相关文章

禁烟警示器报警器

本例介绍的禁止吸烟警示器,可用于家庭居室或各种不宜吸烟的场合 (例如医院、会议室等)。当有人吸烟时,该禁止吸烟警示器会发出"请不要吸烟!"的语言警示声,提醒吸烟者自觉停止吸烟。 一、电路工作原理 电路原理如图 5 所示。 该…

3-如何创建等比数列?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 3-如何创建等差数列?

一文带你了解WebSocket与技术原理

文章目录 一、技术发展史二、什么是WebSocket三、WebSocket与Socket四、WebSocket 机制五、WebSocket API简单实现 一、技术发展史 在了解WebSocket之前,我们先了解这项技术的发展史,它可以追溯到2008年,当时HTML5规范中引入了该协议作为一种…

【Java】Java核心 80:Git 教程(3)初始化工作区 add与commit

文章目录 04.GIT本地操作-初始化工作区目标内容小结 05.GIT本地操作-add与commit目标内容小结 在Git中,初始化工作区并使用add和commit命令是进行版本控制的基本操作。 下面是对这些操作的简要解释: 初始化工作区:在使用Git之前&#xff0c…

【语音播报】没时间刷新闻热搜?让博灵语音通知终端读给你听!-声光报警灯|语音播报器|Modbus报警灯|网口语音播报|网络语音播报器

背景 每天上班太忙碌,没有时间刷微博,新闻发展的太快,生怕错过微博热搜,看着手边的博灵语音通知终端,决定自己写一个脚本,让它给我读新闻! 少废话,先看东西 实现了以下效果 每90…

02 快速定位关键点并爆破

vm所进行的代码级的保护是对于软件保护的最后一层 1、API断点法 如何切换到程序的代码节的位置? 》od点击e->双击xxx.exe即可 程序需要读取文本框输入的内容,所以肯定会调用GetWindowText函数,所以可以ctrlg然后输入GetWindowText进行…

ChatGPT 和 Elasticsearch:分面、过滤和更多上下文

作者:Luca Wintergerst 在最近的一篇博客文章中,我们讨论了 ChatGPT 和 Elasticsearch 如何协同工作以帮助更有效地管理专有数据。 通过利用 Elasticsearch 的搜索功能和 ChatGPT 的上下文理解,我们演示了如何改进结果。 在这篇文章中&#…

制造业数字化转型难?低代码带来曙光

概要:制造业企业在数字化转型中一直面临着许多困难和挑战,中小企业更是如此。天翎低代码平台通过自身可视化设计、私有化部署、灵活性、扩展性和兼容性等特性,帮助制造业企业更好地完成数字化转型目标。不仅如此,天翎还推出了微鳄…

iview tree树形控件多选,自定义内容

项目中需要一个iview框架的树形控件,需要里面包含以下功能 1、控件宽度可展开,可缩小2、树形控件可搜索,并且定位到搜索的节点3、控件可以一键勾选,一键取消4、控件图标自定义5、 点击最后一个节点时可以进入到二级节点,点击上一节点可返回完整代码:listToTree文件 效果图: 具…

标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜

标准模版库 https://blog.csdn.net/shaozheng0503/article/details/129101932?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168802585416800211563089%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id1688025854168…

前端判断img图片未能正确加载时显示一个默认图片。img标签onerror事件设置了本地默认图片还是不显示的问题

前端img标签中引用后端交给的图片地址时,有可能这个路径下图片被删除或者损坏了,那么页面在加载img图片时就显示为,太丑了。 img标签有个onerror事件,就是当图片未被正确加载的时候调用此事件,写的时候在onerror事件里…

安装国产系统Kylin-Desktop实战

前言 随着国产化系统的呼声越来越高,再加上今年6月红帽公司发表声明,只有付费才能拿到代码的通告,学习国产化势在必行。 在众多的国产化系统中,我选择了排名比较高的系统,今天我们就一起来安装下麒麟的操作系统 &…

习题-集合框架

目录 1.打印信息 2.ArrayList的使用 User类 测试类 3.Set的使用 汽车类 测试类 4.ArrayList使用 5.新闻 新闻类 测试类 6.返回索引 7.删除重复QQ 8.Map集合操作 9.成绩排序 学生类 测试类 10.Map基础题 学员类 测试类 11.遍历Map综合-国家名称 12.Collec…

1. Linux手写简单的线程池

目录 一、线程池的概念二、线程池的核心组件三、数据结构设计1、任务队列2、线程池 四、接口设计1、创建线程池2、销毁线程池3、抛出任务的接口 五、实现一个线程池及测试1、测试单生成者——多消费者2、测试多生产者——多消费者3、thrd_pool.h4、thrd_pool.c5、main.c6、thrd…

<C语言> 操作符

1.算术操作符 加法():用于将两个操作数相加。减法(-):用于将第一个操作数减去第二个操作数。乘法(*):用于将两个操作数相乘。除法(/):…

使用JavaScript获取随机数序列

使用Javascript 生成随机数 要在 Javascript 中生成随机数,可以使用 Math 对象的 random() 方法。该方法返回一个大于等于 0 小于 1 的伪随机浮点数。 Javascript中的 Math.random() 函数是一个用于生成随机数的内置函数。 MDN 官方解释 Math.random() 函数返回…

idea常用快捷方式,保姆级!图文并茂【建议收藏】

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 给大家分享一下idea在开发过程中使用的快捷方式把,可以极大的提升生产力,提高自己的开发速度,需要在开发中不断地使用,…

《Linux操作系统编程》 第十章 线程与线程控制: 线程的创建、终止和取消,detach以及线程属性

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

arcgis-elasticsearch矢量数据导入及索引设计工具

插件说明 插件支持单图层导入和多图层同时导入,依赖elasticsearch包和urlLib包,使用之前请用pip安装,具体的依赖包的requirements.txt文件放在压缩包里面了。 pip install -r requirements.txt插件下载地址:https://download.cs…

DocuSign:在全球电子签名市场具有巨大上涨潜力的SaaS股

来源:猛兽财经 作者:猛兽财经 总结 (1)DocuSign的核心电子签名业务还在持续增长,尽管在疫情后增速有所放缓,但第一季度的收入已经达到了6.61亿美元,增长率为12%。 (2)Do…