GoLang自用工具方法

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
}
发布了201 篇原创文章 · 获赞 26 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/103992579