随笔分类 -  golang

摘要:说明: 很多系统都是将密码进行一次 MD5 或 SHA1 Hash后存入数据库中。这样的密码抵挡不住字典攻击。所谓字典攻击, 就是将常用密码进行Hash后做成一个字典,破解的时候,只需要查字典就能知道对应的明文密码。 为了抵御字典攻击,推荐的做法是使用 密码 + 盐(一串随机数) 再Hash的方式。 阅读全文
posted @ 2022-04-29 10:44 专职 阅读(861) 评论(0) 推荐(0) 编辑
摘要:案例1: func main() { slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} s1 := slice[2:5] // s1=[2, 3, 4], len=3, cap=8 s2 := s1[2:6:7] // s2=[4, 5, 6, 7], len 阅读全文
posted @ 2022-03-14 14:09 专职 阅读(362) 评论(0) 推荐(0) 编辑
摘要:go-redis库的使用 安装go-redis库 go get github.com/go-redis/redis/v8 github链接 创建redis客户端并设置值 // 短信验证码发送成功,将验证码保存到redis rdb := redis.NewClient(&redis.Options{ 阅读全文
posted @ 2022-03-05 19:03 专职 阅读(275) 评论(0) 推荐(0) 编辑
摘要:下载依赖 go get -u github.com/alibabacloud-go/dysmsapi-20170525/v2 go get -u github.com/alibabacloud-go/darabonba-openapi go get -u github.com/alibabaclou 阅读全文
posted @ 2022-03-05 11:32 专职 阅读(790) 评论(0) 推荐(0) 编辑
摘要:package response import ( "fmt" "time" ) type JsonTime time.Time func (j JsonTime) MarshalJSON() ([]byte, error) { // 重写time转换成json之后的格式 var stmp = fm 阅读全文
posted @ 2022-02-20 15:00 专职 阅读(434) 评论(0) 推荐(0) 编辑
摘要:channel+goroutine是go并发的大杀器 channel可以用来停止信号(发送信号停止子goroutine的执行) 超时控制(websocket中长时间不活跃的用户可以直接断开链接) 定时任务的执行 解耦生产方和消费方 控制最大并发数量 案例见下面: * channel和goroutin 阅读全文
posted @ 2022-02-18 11:11 专职 阅读(973) 评论(0) 推荐(0) 编辑
摘要:代码案例 package main import ( "fmt" "net/http" _ "net/http/pprof" ) func main(){ for i := 0; i < 5; i++ { go func() { select { default: return } }() } go 阅读全文
posted @ 2022-01-25 11:50 专职 阅读(239) 评论(0) 推荐(0) 编辑
摘要:cond是什么 Cond实现了一种条件变量,可以使用在多个reader等待共享资源ready的场景,(如果只有一读一写,一个锁或者channel就搞定了) 每个Cond都会关联一个Lock(*sync.Mutex or *sync.RWMutex), 当修改条件或者调用Wait方法时,必须加锁以保护 阅读全文
posted @ 2022-01-25 10:52 专职 阅读(636) 评论(0) 推荐(0) 编辑
摘要:package main import ( "fmt" "reflect" "strconv" "time" ) func main() { a := 15 // 整数转浮点数 b := float64(a) // go支持显示类型转换,以满足严格的类型要求 fmt.Println(b, refle 阅读全文
posted @ 2022-01-18 16:32 专职 阅读(1949) 评论(0) 推荐(0) 编辑
摘要:func main() { // 字符串转bytes类型 name := "马亚南" fmt.Println(name) // 马亚南 bName := []byte(name) fmt.Println(bName) // [233 169 172 228 186 154 229 141 151] 阅读全文
posted @ 2021-12-21 11:42 专职 阅读(995) 评论(0) 推荐(0) 编辑
摘要:package main import ( "fmt" "strconv" ) func f2i(f float64) int { i, _ := strconv.Atoi(fmt.Sprintf("%1.0f", f)) return i } func main() { var floats = 阅读全文
posted @ 2021-12-19 12:01 专职 阅读(6500) 评论(0) 推荐(0) 编辑
摘要:go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.go 下的Marshaler接口的MarshalJSON方法和decode.go下的Unmarshal 阅读全文
posted @ 2021-12-13 14:09 专职 阅读(1406) 评论(0) 推荐(0) 编辑
摘要:package tool import ( "crypto/md5" "crypto/sha256" "encoding/base64" "encoding/hex" "fmt" "io" ) func EncoderSha256(data string) string { h := sha256. 阅读全文
posted @ 2021-12-12 16:21 专职 阅读(816) 评论(0) 推荐(0) 编辑
摘要:一行代码搞定 code := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) fmt.Println(code) 阅读全文
posted @ 2021-11-27 18:01 专职 阅读(427) 评论(0) 推荐(0) 编辑
摘要:package tool import ( "bufio" "encoding/json" "fmt" "os" ) type Config struct { AppName string `json:"app_name"` AppMode string `json:"app_mode"` AppH 阅读全文
posted @ 2021-11-21 18:42 专职 阅读(1112) 评论(0) 推荐(0) 编辑
摘要:1. redis简单介绍 redis支持数据的持久化,将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用 redis不仅仅支持key-value数据,还支持:string,list,set,hash等 redis支持数据备份,即master-slaver模式的数据备份 读11w/s,写8W/ 阅读全文
posted @ 2021-11-12 17:37 专职 阅读(725) 评论(0) 推荐(0) 编辑
摘要:package main import ( "fmt" "reflect" ) func B2S(bs []uint8) string { // 将字节切片转换成字符串 ba := make([]byte, 0) // 创建一个字节切片,默认容量0 fmt.Println(ba, reflect.T 阅读全文
posted @ 2021-11-12 14:29 专职 阅读(2407) 评论(0) 推荐(0) 编辑
摘要:1. 安装mysql驱动库和sqlx基于官方sql库的扩展库 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx 2. 链接mysql package main import ( "fmt" _ "github.c 阅读全文
posted @ 2021-11-11 17:06 专职 阅读(121) 评论(0) 推荐(0) 编辑
摘要:一、GMP模型原理first: 1. 全局队列:存放待运行的G2. P的本地队列:同全局队列类似,存放待运行的G,存储的数量有限:256个,当创建新的G‘时,G’优先加入到P的本地队列,如果队列已满,会把P本地队列中一半的G移动到全局队列3. M线程:M运行G需要先获取P,然后从P本地队列中取G运行 阅读全文
posted @ 2021-11-11 11:21 专职 阅读(351) 评论(0) 推荐(0) 编辑
摘要:1. 概念 原子操作 atomic 包 加锁操作涉及到内核态的上下文切换,比较耗时,代价高, 针对基本数据类型我们还可以使用原子操作来保证并发的安全, 因为原子操作是go语言提供的方法,我们在用户态就可以完成,因此性能比加锁操作更好 go语言的原子操作由内置的库 sync/atomic 完成2. a 阅读全文
posted @ 2021-11-10 10:57 专职 阅读(562) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示