前期: Go-TG-Bot开发 – Lean Demo (iepl.cc)
为什么要打包
最初写完了,直接右键run就可以了。 但是程序写完了毕竟是要发布到服务器上或者给别人用的,你第一不可能让所有要运行的人都装个eclipse,第二不可能把源代码公布给所有人。 所以你需要把你的代码发布成二进制形式,让其它环境方便运行,这就是打包。
好处
不用去一个个安装依赖环境什么的了,直接运行即可,方便使用。
使用工具
1.codeserver(看前文1讲述安装方法)
2.GoReleaser - GoReleaser(Golang快捷打包工具)
3.学会go.mod包管理器使用
GoReleaser的功能
GoReleaser 是 Go 项目的发布自动化工具。目标是简化构建、发布和发布步骤,同时为所有步骤提供变体自定义选项。
GoReleaser是在构建CI工具的情况下构建的,您只需要在构建脚本中下载并执行它。当然,如果需要,您仍然可以在本地安装它。
您的发布过程可以通过文件进行自定义。.goreleaser.yaml
设置完成后,每次要创建新版本时,您需要做的就是标记并运行:goreleaser release

开始吧
安装goreleaser(其他教程推荐:golang 一键跨平台发布-goreleaser - 小幻博客 (52xhuan.cn))
go install github.com/goreleaser/goreleaser@latest
在前文项目根目录运行 goreleaser init 创建示例文件:.goreleaser.yaml
goreleaser init

我们给他来个名字,在最上面添加 project_name: demo1,demo1为名字
project_name: demo1

更多使用方法 goreleaser release - GoReleaser
此时我们需要修改export GO111MODULE=on
在程序目录下执行
export GO111MODULE=on
因为使用了 GO111MODULE=on ,也就是使用 go.mod 管理包,我们需要初始化一下 go.mod,这也是golang推荐的做法,,在程序目录下执行 go mod init 初始化 go.mod 文件,demo1为项目名字,随便取一个即可
go mod init demo1
此时,因为我们使用了go.mod包管理器,所以我们更换一下telegram bot api的包,将前文main.go文件的tgbotapi "gopkg.in/telegram-bot-api.v5"修改为,然后还需要将你的程序目录也就是这里的videos/IMG_0953.jpg修改为绝对路径
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
package main
import (
"log"
"os"
"strconv"
tgbotapi "gopkg.in/telegram-bot-api.v5"
)
//tg机器人
func main() {
bot, err := tgbotapi.NewBotAPI("你的机器人密钥")
if err != nil {
log.Panic(err)
}
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
//如果发送的不是空的
if update.Message == nil {
continue
}
//如果发送的不是带有 / 的文字
if !update.Message.IsCommand() {
continue
}
//循环接收,判断指令发送
switch update.Message.Command() {
//发送文档方法
//msg1 := tgbotapi.NewDocument(update.Message.Chat.ID, tgbotapi.FilePath("README.md"))
//发送视频方法
//msg2 := tgbotapi.NewVideo(update.Message.Chat.ID, tgbotapi.FilePath("videos/IBW-751.mp4"))
reader, _ := os.Open("/root/go/videos/IMG_0953.jpg")
file2 := tgbotapi.FileReader{
Name: "image.jpg",
Reader: reader,
}
//发送文档
msg2 := tgbotapi.NewDocument(update.Message.Chat.ID, file2)
if _, err := bot.Send(msg2); err != nil {
log.Panic(err)
}
}
}
现在,让我们运行一个"仅限本地"的版本,看看它是否可以使用 release 命令工作:
goreleaser release --snapshot --rm-dist
如何将会在/dist目录下自动生成一批文件,cd进入 /dist/demo1_linux_amd64 然后运行 ./demo1试试看
cd /你的项目文件夹
cd /dist/demo1_linux_amd64
./demo1



Comments NOTHING