package util
import (
"log"
"fmt"
"gopkg.in/gomail.v2"
"io"
"net/url"
"os"
"path"
"path/filepath"
"strings"
"time"
)
//在字符串中查找指定字串,并返回left或right部分
func Substr(str string, target string, turn string, hasPos bool) string {
pos := strings.Index(str, target)
if pos == -1 {
return ""
}
if turn == "left" {
if hasPos == true{
pos = pos + 1
}
return str[:pos]
}else if turn == "right" {
if hasPos == false{
pos = pos + 1
}
return str[pos:]
}else{
panic("params 3 error")
}
}
//获得当前绝对路径
func GetCurrentDirectory() string {
dir, err := filepath.Abs(filepath.Dir(os.Args[0])) //返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径
if err != nil {
log.Fatal(err)
}
return strings.Replace(dir, "\\", "/", -1) //将\替换成/
}
//url的path转文件名
func UriToFilePath(uriPath string, dir string) string {
pathArr := strings.Split(uriPath, "/")
fileName := strings.Join(pathArr, "-")
writePath := CreateDateDir(dir) //根据时间检测是否存在目录,不存在创建
fileName = path.Join(writePath, fileName[1:len(fileName)] + ".log")
return fileName
}
func LogByUrl(fullUrl string) string{
u, err:= url.Parse(fullUrl)
if err != nil{
panic(err)
}
pathArr := strings.Split(u.Path, "/")
fileName := strings.Join(pathArr, "-")
writePath := "/tmp/logs/2020-01-12"
fileName = path.Join(writePath, fileName[1:len(fileName)] + ".log")
return fileName
}
//根据当前日期,不存在则创建目录
func CreateDateDir(Path string) string {
folderName := time.Now().Format("20060102")
folderPath := filepath.Join(Path, folderName)
if _, err := os.Stat(folderPath); os.IsNotExist(err) {
// 必须分成两步:先创建文件夹、再修改权限
os.Mkdir(folderPath, 0777) //0777也可以os.ModePerm
os.Chmod(folderPath, 0777)
}
return folderPath
}
//使用io.WriteString()函数进行数据的写入,不存在则创建
func WriteWithIo(filePath, content string) error {
//os.O_WRONLY | os.O_CREATE | O_EXCL 【如果已经存在,则失败】
//os.O_WRONLY | os.O_CREATE 【如果已经存在,会覆盖写,不会清空原来的文件,而是从头直接覆盖写】
//os.O_WRONLY | os.O_CREATE | os.O_APPEND 【如果已经存在,则在尾部添加写】
fileObj,err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)
if err != nil {
fmt.Println("Failed to open the file",err.Error())
return err
}
if content != ""{
if _,err := io.WriteString(fileObj,content);err == nil {
fmt.Println("Successful appending to the file with os.OpenFile and io.WriteString.",content)
return nil
}
return err
}
return nil
}
/*func StructToByte(tmp struct{}){
tmp := &Test{Name: "why", Age: 34, Id: 1}
length := unsafe.Sizeof(tmp)
data := &SliceMock{
addr: uintptr(unsafe.Pointer(tmp)),
cap : int(length),
len : int(length),
}
ret := *(*[]byte)(unsafe.Pointer(data))
}*/
func Assertion(data interface{}) interface{} {
switch data.(type) {
case string:
return data.(string)
case int:
return data.(int)
case int8:
return data.(int8)
case int32:
return data.(int32)
case int64:
return data.(int64)
case float32:
return data.(float32)
case float64:
return data.(float64)
default:
return data
}
return nil
}
func SendMail(mailTo string, subject string, body string) error{
m := gomail.NewMessage()
//设置发件人
m.SetHeader("From", "[email protected]")
//设置发送给多个用户
mailArrTo := strings.Split(mailTo, ",")
m.SetHeader("To", mailArrTo...)
//设置邮件主题
m.SetHeader("Subject", subject)
//设置邮件正文
m.SetBody("text/html", body)
d := gomail.NewDialer("email.qq.com", 587, "[email protected]", "oxlqmgelg3twqibieg")
err := d.DialAndSend(m)
if err != nil {
fmt.Println(err)
}
return err
}
GoLang自用工具方法
猜你喜欢
转载自blog.csdn.net/why444216978/article/details/103992579
今日推荐
周排行