mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 11:22:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package utils
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/jinzhu/copier"
 | 
						|
	"github.com/pkg/errors"
 | 
						|
	"runtime"
 | 
						|
	"strconv"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// copy a by b  b->a
 | 
						|
func CopyStructFields(a interface{}, b interface{}, fields ...string) (err error) {
 | 
						|
	return copier.Copy(a, b)
 | 
						|
}
 | 
						|
 | 
						|
func Wrap(err error, message string) error {
 | 
						|
	return errors.Wrap(err, "==> "+printCallerNameAndLine()+message)
 | 
						|
}
 | 
						|
 | 
						|
func WithMessage(err error, message string) error {
 | 
						|
	return errors.WithMessage(err, "==> "+printCallerNameAndLine()+message)
 | 
						|
}
 | 
						|
 | 
						|
func printCallerNameAndLine() string {
 | 
						|
	pc, _, line, _ := runtime.Caller(2)
 | 
						|
	return runtime.FuncForPC(pc).Name() + "()@" + strconv.Itoa(line) + ": "
 | 
						|
}
 | 
						|
 | 
						|
func GetSelfFuncName() string {
 | 
						|
	pc, _, _, _ := runtime.Caller(1)
 | 
						|
	return cleanUpFuncName(runtime.FuncForPC(pc).Name())
 | 
						|
}
 | 
						|
func cleanUpFuncName(funcName string) string {
 | 
						|
	end := strings.LastIndex(funcName, ".")
 | 
						|
	if end == -1 {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return funcName[end+1:]
 | 
						|
}
 | 
						|
func Intersect(slice1, slice2 []uint32) []uint32 {
 | 
						|
	m := make(map[uint32]bool)
 | 
						|
	n := make([]uint32, 0)
 | 
						|
	for _, v := range slice1 {
 | 
						|
		m[v] = true
 | 
						|
	}
 | 
						|
	for _, v := range slice2 {
 | 
						|
		flag, _ := m[v]
 | 
						|
		if flag {
 | 
						|
			n = append(n, v)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return n
 | 
						|
}
 | 
						|
func Difference(slice1, slice2 []uint32) []uint32 {
 | 
						|
	m := make(map[uint32]bool)
 | 
						|
	n := make([]uint32, 0)
 | 
						|
	inter := Intersect(slice1, slice2)
 | 
						|
	for _, v := range inter {
 | 
						|
		m[v] = true
 | 
						|
	}
 | 
						|
	for _, v := range slice1 {
 | 
						|
		if !m[v] {
 | 
						|
			n = append(n, v)
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	for _, v := range slice2 {
 | 
						|
		if !m[v] {
 | 
						|
			n = append(n, v)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return n
 | 
						|
}
 |