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