|
|
以下go原函数中,worker() 函数翻译成火山服务器该怎么写?
type task func() 不知道对应火山的是什么?
import (
"crypto/tls"
"log"
"sync"
"gopkg.in/gomail.v2"
)
// 配置(由 Init 时传入)
var (
dialer *gomail.Dialer
from string
taskChan = make(chan task, 100) // 任务队列,缓冲100
once sync.Once
workerWg sync.WaitGroup
closeOnce sync.Once
)
type task func()
// Config SMTP 配置
type Config struct {
Host string
Port int
Username string // 发件邮箱
Password string // 授权码
From string // 发件人地址(通常同 Username)
}
// Init 初始化邮件发送器并启动 5 个 worker
func Init(cfg Config) {
once.Do(func() {
dialer = gomail.NewDialer(cfg.Host, cfg.Port, cfg.Username, cfg.Password)
// 如果 SMTP 使用自签名证书或某些端口(如465)需要跳过验证
dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}
from = cfg.From
// 启动 5 个 worker
for i := 0; i < 5; i++ {
workerWg.Add(1)
go worker()
}
log.Println("邮件工作池已启动(5 workers)")
})
}
// worker 从 channel 取任务执行
func worker() {
defer workerWg.Done()
for task := range taskChan {
// 捕获 panic 防止 worker 崩溃
func() {
defer func() {
if r := recover(); r != nil {
log.Printf("邮件任务 panic: %v", r)
}
}()
task()
}()
}
}
|
|