Golang第三方库入门指南

Golang第三方库入门指南 首先,对于Go语言我完全是个新手。我已经在Windows和Linux系统上都安装了Go,并且能够创建简单的Hello World程序,这些程序可以正常编译和运行。

然而,我学习Go的目的是为了重写一个用PHP-CLI编写的游戏服务器!所以我正在寻找一些示例代码作为基础。我找到了例如https://github.com/name5566/leaf(以及https://github.com/name5566/leafserver

我可以克隆并下载这些代码库,但完全不知道如何直接编译它们……在少数几次我让go build或go install命令没有立即报"not found"类型错误的情况下,它总是引用github……我尝试过将它们放在不同的文件夹结构中,使用"go init mod"等命令,但都没有成功。

如果我连现有代码都无法编译,就更不用说在学习的基础上编写自己的代码了。

那么……有没有关于如何实际下载和使用第三方代码的教程?从最基础的开始,“创建这样的目录结构,运行这些确切的命令”……

尴尬地表示感谢……


更多关于Golang第三方库入门指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

恭喜!很高兴听到这个消息。


请随意选择一个最合适的答案并"标记为已解决",这样其他人就不会在已解决的问题上花费时间了。表情

更多关于Golang第三方库入门指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


感谢大家。经过几天的调试,我终于成功让leafserver在GOPATH之外使用模块进行编译了……主要改动是将所有导入路径从例如’server/conf’改为完整的github.com路径。同时还在go.mod中添加了-replace指令指向本地的leaf副本。所有修改都已提交到github.com/irrelevantdotcom/leafserver(以及/leaf)

现在终于可以开始真正编写自己的代码了…… 😄

我可以克隆和下载代码库,但完全不知道如何按原样构建它……少数几次我让 go build 或 go install 执行了除立即报"未找到"类型错误之外的操作时,它都在引用 github……我尝试过将它们放在不同的文件夹结构中,执行"go init mod"等操作,但都没有成功。

如果我连按原样构建代码都做不到,就更不可能在学习如何在此基础上编写自己的代码方面取得任何进展。

那么……有没有关于如何实际下载和使用第三方代码的教程?从最基础的开始,“创建这样的目录结构,运行这些确切的命令”……

通常,代码库的作者应该指导您该怎么做。例如:GitHub - golangci/golangci-lint: Fast linters Runner for Go。当没有这样的指导时,不必感到尴尬。


当缺乏此类指导时,您的首要任务是在代码库中寻找 main 包。例如,在 leaf 服务器中,leafserver/src/server at master · name5566/leafserver · GitHub 内有一个 main.go。因此,在根目录下,您应该针对 src/server 包执行 go build,而不是针对根目录。

请注意,这两个代码库都已过时,并且没有使用 go module。因此,您需要在设置 GOPATH 的情况下使用 go get 获取它。尝试:

$ go get -u github.com/name5566/leafserver/tree/master/src/server

或者

# 注意,如果使用 go build,您需要手动解决所有依赖
$ cd $GOPATH/github.com/name5566/leafserver
$ go build -o ./bin ./src/server

Leaf 应该是一个服务器库,因为其中包含一份文档 (leaf/TUTORIAL_EN.md at master · name5566/leaf · GitHub)。这份文档旨在指导您编写自己的 Leaf 服务器。

该代码库是开源的(两者都是 Apache 2.0 许可),因此您可以浏览和阅读其内容。


在使用第三方代码时,有几点需要考虑:

  1. 更新与分发 - 作者如何进行、控制和交付更新
  2. 安全性 - 存在恶意代码注入的可能性
  3. 依赖关系 - 您计划如何维护这些依赖
  4. 支持 - 如果出现问题,您能否及时获得支持以及如何获得。项目是否已被放弃?等等。

以下是在Go语言中使用第三方库的完整步骤,从项目初始化到编译运行:

1. 创建项目目录结构

# 创建项目目录
mkdir my-gameserver
cd my-gameserver

2. 初始化Go模块

# 初始化模块(替换your-username为你的GitHub用户名)
go mod init github.com/your-username/my-gameserver

3. 获取第三方库

# 获取leaf库
go get github.com/name5566/leaf

4. 创建主程序文件

创建 main.go

package main

import (
	"github.com/name5566/leaf"
	lconf "github.com/name5566/leaf/conf"
)

func main() {
	// 基础Leaf服务器配置
	lconf.LogLevel = "debug"
	lconf.LogPath = "logs"
	lconf.LogFlag = "log.LstdFlags"
	lconf.ConsolePort = 3333
	lconf.ProfilePath = "profile"

	// 启动Leaf框架
	leaf.Run(
	// 在这里添加你的模块
	)
}

5. 处理依赖

# 整理和下载所有依赖
go mod tidy

# 查看依赖关系
go mod graph

6. 编译运行

# 编译
go build

# 运行
./my-gameserver

完整示例:使用Leaf创建简单服务器

创建 server/main.go

package main

import (
	"fmt"
	"github.com/name5566/leaf"
	"github.com/name5566/leaf/module"
)

// 定义自定义模块
type GameModule struct {
	*module.Skeleton
}

func (m *GameModule) OnInit() {
	fmt.Println("游戏模块初始化")
}

func (m *GameModule) OnDestroy() {
	fmt.Println("游戏模块销毁")
}

func main() {
	// 创建模块
	gameMod := &GameModule{
		Skeleton: module.NewSkeleton(),
	}

	// 注册并启动
	leaf.Run(
		gameMod,
	)
}

关键目录结构

my-gameserver/
├── go.mod
├── go.sum
├── main.go
└── server/
    └── main.go

编译命令总结

# 在项目根目录执行
go mod init your-module-name
go mod tidy
go build

执行这些步骤后,Go会自动下载所有依赖并创建可执行文件。如果遇到网络问题,可以设置代理:

go env -w GOPROXY=https://goproxy.cn,direct
回到顶部