Documentation
¶
Overview ¶
* 采用cas实现乐观锁及TryLock Compare And Swap 简称CAS,在sync/atomic包种 这类原子操作由名称以‘CompareAndSwap’为前缀的若干个函数代表。 声明如下
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
调用函数后,会先判断参数addr指向的被操作值与参数old的值是否相等 仅当此判断得到肯定的结果之后,才会用参数new代表的新值替换掉原先的旧值,否则操作就会被忽略。 so, 需要用for循环不断进行尝试,直到成功为止
使用锁的做法趋于悲观
我们总假设会有并发的操作要修改被操作的值,并使用锁将相关操作放入临界区中加以保护
使用CAS操作的做法趋于乐观
总是假设被操作值未曾被改变(即与旧值相等),并一旦确认这个假设的真实性就立即进行值替换。
chan实现trylock乐观锁
*
- 每天流动式日志实现
- 操作日志记录到文件,支持info,error,debug,notice,alert等
- 写日志文件的时候,采用chan实现的乐观锁方式对文件句柄进行加锁
- 等级参考php Monolog/logger.php
Index ¶
- Constants
- Variables
- func AlterLog(v interface{})
- func CatchStack() []byte
- func CheckPanic()
- func CopyFile(distName, srcName string) (w int64, err error)
- func CritLog(v interface{})
- func DeAES(in, key, iv []byte) ([]byte, error)
- func DebugLog(v interface{})
- func EmergLog(v interface{})
- func EnAES(in, key, iv []byte) ([]byte, error)
- func ErrorLog(v interface{})
- func Filebase(file string) string
- func Fileline(file string, line int) string
- func FormatNow() string
- func FormatTime(t time.Time) string
- func FormatTime19(t time.Time) string
- func FormatUTC() string
- func GetCurrentLocalTime() string
- func GetLoc(zone string) *time.Location
- func GetTimeByTimeZone(zone string) string
- func Gunzip(in []byte) ([]byte, error)
- func Gzip(in []byte) ([]byte, error)
- func Hash(mem []byte) uint64
- func HupSignal() <-chan os.Signal
- func InfoLog(v interface{})
- func Init(writer io.Writer)
- func Int64ToStr(i64 int64) string
- func IntToStr(n int) string
- func IsSystemdService() bool
- func Krand(size int, kind int) string
- func ListenRpc(addr string, obj interface{}) error
- func ListenSocket(addr string, keepalive bool, reactiver func(net.Conn)) error
- func ListenUdp(addr string, bufsize int, reactiver func(*net.UDPAddr, []byte) []byte) error
- func LoadGobData(data interface{}, fileName string)
- func Md5(str string) string
- func NewUUID() string
- func NoticeLog(v interface{})
- func NumberNow() uint64
- func NumberTime(t time.Time) uint64
- func NumberUTC() uint64
- func ParseNumber(t uint64) (time.Time, error)
- func ParseNumberUTC(t uint64) (time.Time, error)
- func ParseTime(s string) (time.Time, error)
- func ParseTimeUTC(s string) (time.Time, error)
- func QuitSignal() <-chan os.Signal
- func RandInt64(min, max int64) int64
- func RndUuid() string
- func RndUuidMd5() string
- func Round(f float64, n int) float64
- func RunShell(exeStr string) (string, error)
- func SetLogDir(dir string)
- func SetLogTime(logtime bool)
- func SetLogTimeZone(timezone string)
- func SetTimeZone(zone string)
- func Sha1(str string) string
- func Stack() []byte
- func StoreGobData(data interface{}, fileName string) error
- func StrJoin(sep string, str ...string) string
- func StrJoinByBuf(str ...string) string
- func StrToInt(s string) int
- func StrToInt64(s string) int64
- func StringMapKeys(m interface{}) (res []string)
- func WarnLog(v interface{})
- func Xss(str string) string
- func XssUnescape(str string) string
- type ChanLock
- type EmptyStruct
- type Lock
- type Mutex
- type Semaphore
- type StringList
Constants ¶
const ( EMERGENCY = "emerg" // 严重错误: 导致系统崩溃无法使用 ALERT = "alter" // 警戒性错误: 必须被立即修改的错误 CRIT = "crit" // 临界值错误: 超过临界值的错误,例如一天24小时,而输入的是25小时这样 ERR = "error" // 一般错误: 一般性错误 WARN = "warn" // 警告性错误: 需要发出警告的错误 NOTICE = "notice" // 通知: 程序可以运行但是还不够完美的错误 INFO = "info" // 信息: 程序输出信息 DEBUG = "debug" // 调试: 调试信息 )
日志级别 从上到下,由高到低
Variables ¶
var LogLevelMap = map[string]int{ EMERGENCY: 600, ALERT: 550, CRIT: 500, ERR: 400, WARN: 300, NOTICE: 250, INFO: 200, DEBUG: 100, }
var TimeZone = "PRC" //默认时区设置
Functions ¶
func FormatTime ¶
format a time.Time to string as 2006-01-02 15:04:05.999
func FormatTime19 ¶
format a time.Time to string as 2006-01-02 15:04:05 将time.time转换为日期格式
func GetTimeByTimeZone ¶
func IsSystemdService ¶
func IsSystemdService() bool
func NewUUID ¶
func NewUUID() string
通过随机数的方式生成uuid 如果rand.Read失败,就按照当前时间戳+随机数进行md5方式生成 该方式生成的uuid有可能存在重复值 返回格式:7999b726-ca3c-42b6-bda2-259f4ac0879a
func NumberTime ¶
format a time.Time to number as 20060102150405999
func ParseTimeUTC ¶
parse a string as "2006-01-02 15:04:05.999" to time.Time
func RndUuid ¶
func RndUuid() string
基于时间ns和随机数实现唯一的uuid 在单台机器上是不会出现重复的uuid 如果要在分布式的架构上生成不重复的uuid 只需要在rndStr的前面加一些自定义的字符串 返回格式:eba1e8cd-0460-4910-49c6-44bdf3cf024d
func RndUuidMd5 ¶
func RndUuidMd5() string
func SetTimeZone ¶
func SetTimeZone(zone string)
func Stack ¶
func Stack() []byte
获取完整的堆栈信息 Stack returns a formatted stack trace of the goroutine that calls it. It calls runtime.Stack with a large enough buffer to capture the entire trace.
func StoreGobData ¶
func StringMapKeys ¶
func StringMapKeys(m interface{}) (res []string)
func XssUnescape ¶
Types ¶
type ChanLock ¶
type ChanLock struct {
// contains filtered or unexported fields
}
func NewChanLock ¶
func NewChanLock() *ChanLock
func (*ChanLock) TryLockTimeout ¶
指定时间内的乐观锁
type Semaphore ¶
type Semaphore struct {
// contains filtered or unexported fields
}
分配安全的bool chan
func NewSemaphore ¶
type StringList ¶
type StringList []string
str list
func (StringList) Count ¶
func (this StringList) Count() int
func (StringList) Delete ¶
func (this StringList) Delete(token string) int
func (StringList) IsEmpty ¶
func (this StringList) IsEmpty() bool
func (StringList) Len ¶
func (this StringList) Len() int
func (StringList) Less ¶
func (this StringList) Less(i, j int) bool
func (StringList) Swap ¶
func (this StringList) Swap(i, j int)
func (StringList) UniqueAdd ¶
func (this StringList) UniqueAdd(token string) StringList