AI大法好,我入门go语言了。
前言
上篇文章说替换了评论系统,真是大言不惭了,待我装完Artalk评论系统,看了看配置项,我就把评论暂时删了。 这套系统就够玩半天的了,图床配置,评论审核,验证码,一项配置就是一套系统,要么用第三方的api,要么自己搭环境。
我开始怀疑我用得着评论嘛,不,我热爱的不是互动,是折腾过程。以下就是Artalk的upgit折腾过程。
安装Artalk
Artalk的安装比较简单,直接docker部署,命令如下:
docker run -d --name artalk -p 8080:8080 -v /data/artalk:/data artalk/artalk:latest配置Artalk
Artalk需要进容器配置管理员,命令如下:
docker exec -it artalk /bin/bash
artalk admin
# 设置管理员昵称、邮箱、密码Trae编辑器
Artalk推荐使用upgit上传图床,但是呢,七牛的token有时效性,我在网上搜到了这篇文章 《UPGIT切换其他图床》,讲了自己动手开发源代码以支持七牛秘钥换取token。
一看涉及到改代码,我就有点打退堂鼓,毕竟对于Go语言,我可能也就知道它是一种开发语言了,真正零基础。
但是我一想,我有AI啊。下载upgit源代码,扔进Trae编辑器中,IDE直接提醒我安装Go环境,那个博主后边的语法错误他还排查了一下,AI生成的我基本就没改,直接就用了。
源代码只需要改 main.go 文件就好了。go.mod 和 go.sum 类似于 Python 的 requirements.txt,都是依赖文件。编译前直接 go get 下就可以自动更新这俩文件了。
修改源代码
我去七牛官网看了下SDK,和前边博主的引入包不太一样,我用的这俩:
// main.go import 里面加上这俩
import (
// ... 其他引入
"github.com/qiniu/go-sdk/v7/storagev2/credentials"
"github.com/qiniu/go-sdk/v7/storagev2/uptoken"
)然后在PowerShell中执行以下命令安装依赖:
go get github.com/qiniu/go-sdk/v7/storagev2/credentials
go get github.com/qiniu/go-sdk/v7/storagev2/uptoken根据七牛官方示例,我让AI生成了获取token方法,如下:
// generateQiniuToken 生成七牛云上传token
func generateQiniuToken(accessKey, secretKey, bucketName string) (string, error) {
// 创建七牛云认证对象
mac := credentials.NewCredentials(accessKey, secretKey)
if mac == nil {
return "", errors.New("failed to create qiniu auth object")
}
bucket := bucketName
putPolicy, err := uptoken.NewPutPolicy(bucket, time.Now().Add(1*time.Hour))
if err != nil {
return "", err
}
upToken, err := uptoken.NewSigner(putPolicy, mac).GetUpToken(context.Background())
if err != nil {
return "", err
}
return upToken, nil
}然后在 main.go 中调用了这个方法,去搜索 if uploaderId == "s3" { ... },在它下面加上七牛的判断,因为七牛用的通用的上传方法 SimpleHttpUploader,所以原文里面是没有qiniu的分支判断的,咱自己加下。
// 重新定义token
upToken := ""
if uploaderId == "qiniu" {
qiniuconfig, err := xapp.LoadUploaderConfig[map[string]interface{}](uploaderId)
xlog.AbortErr(err)
accessKey, ok := qiniuconfig["access_key"].(string)
if !ok {
xlog.AbortErr(errors.New("qiniu access_key not found"))
}
secretKey, ok := qiniuconfig["secret_key"].(string)
if !ok {
xlog.AbortErr(errors.New("qiniu secret_key not found"))
}
bucketName, ok := qiniuconfig["bucket_name"].(string)
if !ok {
xlog.AbortErr(errors.New("qiniu bucket_name not found"))
}
upToken, err = generateQiniuToken(accessKey, secretKey, bucketName)
xlog.AbortErr(err)
}
// 继续在这个方法体里往下写
uploader = &uploaders.SimpleHttpUploader{Definition: uploaderDef}
extConfig, err := xapp.LoadUploaderConfig[map[string]interface{}](uploaderId)
if err == nil {
//加在这里 七牛需要替换token
if uploaderId == "qiniu" {
extConfig["token"] = upToken
}
uploader.Config = extConfig
xlog.GVerbose.Trace("uploader config:")
xlog.GVerbose.TraceStruct(uploader.Config)
} else {
xlog.GVerbose.Trace("no uploader config found")
}编译执行文件
最后就是编译成可执行文件了,AI上来就让make,发现执行不了,就推荐直接使用go命令编译了,很流畅。
# 创建输出目录
mkdir -p .\dist
# 配置代理
go env -w GOPROXY=https://goproxy.cn
# 清理缓存(如果遇到卡住的情况)
go clean -modcache
# 编译Linux版本
$env:GOOS="linux"; $env:GOARCH="amd64"; go build -v -ldflags="-s -w" -o .\dist\upgit_linux_amd64 .
# 编译Windows版本
$env:GOOS="windows"; $env:GOARCH="amd64"; go build -v -ldflags="-s -w" -o .\dist\upgit_windows_amd64.exe .
