58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package pkg
|
||
|
||
import (
|
||
"ai_scheduler/internal/entitys"
|
||
"encoding/json"
|
||
"errors"
|
||
"fmt"
|
||
"net/url"
|
||
"strings"
|
||
)
|
||
|
||
func JsonStringIgonErr(data interface{}) string {
|
||
return string(JsonByteIgonErr(data))
|
||
}
|
||
|
||
func JsonByteIgonErr(data interface{}) []byte {
|
||
dataByte, _ := json.Marshal(data)
|
||
return dataByte
|
||
}
|
||
|
||
// IsChannelClosed 检查给定的 channel 是否已经关闭
|
||
// 参数 ch: 要检查的 channel,类型为 chan entitys.ResponseData
|
||
// 返回值: bool 类型,true 表示 channel 已关闭,false 表示未关闭
|
||
func IsChannelClosed(ch chan entitys.ResponseData) bool {
|
||
select {
|
||
case _, ok := <-ch: // 尝试从 channel 中读取数据
|
||
return !ok // 如果 ok=false,说明 channel 已关闭
|
||
default: // 如果 channel 暂时无数据可读(但不一定关闭)
|
||
return false // channel 未关闭(但可能有数据未读取)
|
||
}
|
||
}
|
||
|
||
// ValidateImageURL 验证图片 URL 是否有效
|
||
func ValidateImageURL(rawURL string) error {
|
||
// 1. 基础格式验证
|
||
parsed, err := url.Parse(rawURL)
|
||
if err != nil {
|
||
return fmt.Errorf("invalid URL format: %v", err)
|
||
}
|
||
|
||
// 2. 检查协议是否为 http/https
|
||
if parsed.Scheme != "http" && parsed.Scheme != "https" {
|
||
return errors.New("URL must use http or https protocol")
|
||
}
|
||
|
||
// 3. 检查是否有空的主机名
|
||
if parsed.Host == "" {
|
||
return errors.New("URL missing host")
|
||
}
|
||
|
||
// 4. 检查路径是否为空(可选)
|
||
if strings.TrimSpace(parsed.Path) == "" {
|
||
return errors.New("URL path is empty")
|
||
}
|
||
|
||
return nil
|
||
}
|