工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:golang

golang中map并发读写问题及解决方法

 https://blog.csdn.net/qq_17612199/article/details/79601222

 
https://blog.csdn.net/skh2015java/article/details/60334091

map按key和按value排序

 https://studygolang.com/articles/10530

 

--------------

可以把k,v组织为一个struct的成员,把其用slice存放后,按照自己的排序方式对slice进行排序。

这种思想可以实现你想要的任意排序。

golang基础-排序、二分查找、map、map排序反转

 https://blog.csdn.net/u013210620/article/details/78344771

正则表达式(括号)、[中括号]、{大括号}的区别小结 通用所有语言 系统

 正则表达式的() [] {}有不同的意思。

() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。

(\s*)表示连续空格的字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。

(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。

[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。

————————————————————————————————————————————————————————————

 

圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理
示例:
1、(abc|bcd|cde),表示这一段是abc、bcd、cde三者之一均可,顺序也必须一致
2、(abc)?,表示这一组要么一起出现,要么不出现,出现则按此组内的顺序出现
3、(?:abc)表示找到这样abc这样一组,但不记录,不保存到$变量中,否则可以通过$x取第几个括号所匹配到的项,比如:(aaa)(bbb)(ccc)(?:ddd)(eee),可以用$1获取(aaa)匹配到的内容,而$3则获取到了(ccc)匹配到的内容,而$4则获取的是由(eee)匹配到的内容,因为前一对括号没有保存变量
4、a(?=bbb) 顺序环视 表示a后面必须紧跟3个连续的b
5、(?i:xxxx) 不区分大小写 (?s:.*) 跨行匹配.可以匹配回车符

方括号是单个匹配,字符集/排除字符集/命名字符集
示例:
1、[0-3],表示找到这一个位置上的字符只能是0到3这四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符,而一对方括号只能匹配单个字符
2、[^0-3],表示找到这一个位置上的字符只能是除了0到3之外的所有字符
3、[:digit:] 0-9 [:alnum:] A-Za-z0-9

——————————————————————————————————————————————————————————————————————

()和[]有本质的区别
()内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,后面紧跟的b出现最少1次,最多3次。另外,括号在匹配模式中也很重要。这个就不延伸了,LZ有兴趣可以自己查查
[]表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配。例如[(a)],会匹配(、a、)、这三个字符。
所以() [] 无论是作用还是表示的含义,都有天壤之别,没什么联系

https://www.cnblogs.com/signheart/p/20a396bdbdeb9aa446663395eea4e3c4.html

Golang开发新手常犯的50个错误

Golang开发新手常犯的50个错误

 

https://blog.csdn.net/gezhonglei2007/article/details/52237582
 

理解Go语言的nil

 
https://www.jianshu.com/p/dd80f6be7969

Golang的反射reflect深入理解和示例

 https://juejin.im/post/5a75a4fb5188257a82110544

gorm中的公共方法判断reflect.Value的值是否为空值

 func isBlank(value reflect.Value) bool {

    switch value.Kind() {     case reflect.String:         return value.Len() == 0     case reflect.Bool:         return !value.Bool()     case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:         return value.Int() == 0     case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:         return value.Uint() == 0     case reflect.Float32, reflect.Float64:         return value.Float() == 0     case reflect.Interface, reflect.Ptr:         return value.IsNil()     }     return reflect.DeepEqual(value.Interface(), reflect.Zero(value.Type()).Interface()) }

golang获取昨天的日期

 golang的time包里面有个AddDate方法,可以通过参数获取之后的日期,如果把参数写成负数就可以获取之前的日期


nTime := time.Now()  
yesTime := nTime.AddDate(0,0,-1)  
logDay = yesTime.Format("20060102")  
 
 
------------------
包名 time
当前时间 time.Now()
当前时间戳time.Now().Unix()
时间格式化string
time.Now().Format("2006-01-02 15:04:05")
time.Now().Format("2006-01-02")
时间戳格式化到string
str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05")
string 转化到 时间

以上是时间转化 接下来是总会用到的特殊事件
现在时间 time.Now()
今天00:00:00
now := time.Now()
year, month, day := now.Date()
today_str := fmt.Sprintf("%d-%d-%d 00:00:00", year, month, day)
today_time := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
明天00:00:00
tomorrow := time.Now().Add(24*time.Hour)

year, month, day := now.Date()
tomorrow_str := fmt.Sprintf("%d-%d-%d 00:00:00", year, month, day)
tomorrow_time := time.Date(year, month, day, 0, 0, 0, 0, time.Local)

时间比较
可以转化为时间戳比较
也可以用before 等来比较


// 补充 时间戳转化  
// 例子 前一天这个时候 86400是24小时的秒数 
fmt . Println ( time . Unix ( time . Now (). Unix ()+ 86400 ,   0 ). Format ( "20060102" ))

-------------------------
时间戳 
当前时间戳
 
fmt.Println(time.Now().Unix())
# 1389058332
str格式化时间
当前格式化时间
 
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))  // 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法:6-1-2-3-4-5
# 2014-01-07 09:42:20
时间戳转str格式化时间
 
str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05")
fmt.Println(str_time)
# 2014-01-07 09:32:12
str格式化时间转时间戳
这个比较麻烦
 
the_time := time.Date(2014, 1, 7, 5, 50, 4, 0, time.Local)
unix_time := the_time.Unix()
fmt.Println(unix_time)
# 389045004
还有一种方法,使用time.Parse
 
the_time, err := time.Parse("2006-01-02 15:04:05", "2014-01-08 09:04:41")
if err == nil {
        unix_time := the_time.Unix()
fmt.Println(unix_time)
}
# 1389171881
 
Records:47123456