Golang项目引入第三方依赖库

  • Post author:
  • Post category:golang


基本目录

第一步:

初始化依赖,切换到项目根目录下面,执行一下命令,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))
}



版权声明:本文为qq_28137309原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。