- 博客(110)
- 资源 (1)
- 收藏
- 关注
原创 go debug console _cgo_export.c:6: warning: ignoring #pragma GCC diagnostic
【代码】go debug console _cgo_export.c:6: warning: ignoring #pragma GCC diagnostic。
2023-08-24 13:26:14
19
原创 linux环境下常用的网络命令ping、telnet、traceroute、tcpdump
设备一旦接入网络很难“独善其身”ping命令可以测试目的IP是否可达telnet命令可以测试指定的tcp端口是否可达nc命令可以测试指定udp端口是否可达tracerout命令可以探测网络路径tcpdump命令可以收集所有经过网卡的数据包。
2023-03-06 15:40:13
1243
原创 mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿。这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现。
2023-02-21 16:30:36
4566
原创 go语言环境配置 & 项目启动
go语言各个版本之间兼容性比较差。所以可能你需要安装固定的版本1 安装最新版的go2 查看go可以安装的版本3 安装指定版本的go4 查看安装的go语言的版本go version5 查看go的安装路径6 查看go的环境变量go env主要关注go语言的GOROOTGOPATH这三个环境变量7 如果go version不管用 检查下环境变量是否配置了go语言的环境变量。
2023-02-15 10:05:09
999
原创 Golang 并发 - 协程
并行其实很好理解,就是同时执行的意思,在某一时间点能够执行多个任务。想达到并行效果,最简单的方式就是借助多线程或多进程,这样才可在同一时刻执行多个任务。单线程是永远无法达到并行状态的。
2022-10-13 15:10:22
454
原创 Golang 并发 - Select
select 的用法有点类似 switch 语句,但 select 不会有输入值而且只用于信道操作。select 用于从多个发送或接收信道操作中进行选择,语句会阻塞直到其中有信道可以操作,如果有多个信道可以操作,会随机选择其中一个 case 执行。
2022-10-13 10:57:07
291
原创 golang 面试题(从基础到高级)
Golang面试问题汇总:1.Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量?Golang中Goroutine 可以通过 Channel 进行安全读写共享变量。2.无缓冲 Chan 的发送和接收是否同步?ch := make(chan int) 无缓冲的channel由于没有缓冲发送和接收需要同步。ch := make(chan int, 2) 有缓冲channel不要求发送和接收操作同步。channel无缓冲时,发送阻塞直到数据被接收
2022-03-08 15:51:16
11542
原创 go 进程 线程 协程的区别
进程、线程、协程对比通俗描述有一个老板想要开个工厂进行生产某件商品(例如剪子)他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程这个老板为了提高生产率,想到3种办法:方式 1在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程方式 2老板发现这条
2022-03-08 10:34:24
735
原创 Go基础知识
go的编译为什么比c快https://blog.csdn.net/qq_34417408/article/details/109716015gc的频率slice容量扩容ctx withvaluego内存逃逸mysql gbk 拼音编码b+树为什么方便存储mysql为什么不用外键k8s service做什么deployment limit request排序算法 时间复杂度对比容器间的隔离 namespacedockerfile cmd agentpoint镜像压缩GMP 和c
2022-02-25 18:31:27
377
原创 基于Redis实现分布式锁
什么是分布式锁分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。我们先来看下,一把靠谱的分布式锁应该有哪些特征:「互斥性」: 任意时刻,只有一个客户端能持有锁。「锁超时释放」:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。「可重入性」:一个线程如果获取了锁之后,可以再次对其请求加锁。「高性能和高可用」:加锁和解锁需要开销尽可
2022-02-25 16:32:49
202
原创 Go面试题:channel的无缓存和有缓存区别
1.channel的无缓存:无缓存channel的创建//括号中要定义channel中数据的类型ch := make(chan string)无缓存表示发送者必须等待数据被接收者接收才会继续发送到channel中。func main() { var channel = make(chan int, 0) go func() { for i := 0; i <= 2; i++ { channel <- i fmt.Pri
2022-02-24 19:00:53
824
原创 Go语言面试题:交替打印数字和字母
问题描述使⽤两个goroutine交替打印序列,⼀个goroutine打印数字, 另外⼀个goroutine打印字⺟, 最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728解题思路就像我们在操作系统中学到的用信号量来控制进程协作一样,我们可以用两个无缓冲的channel来控制goroutine的协作。一个叫做number的channel用来通知打印数字的goroutine。另一个叫做l
2022-02-24 18:38:15
1195
原创 chrome 允许不安全脚本限制解决方案
背景:今天线上有个问题就是。chrome加载不安全脚本的提示,组织了页面的显示。原因:是请求跨域导致的。跨域的集中方式:Windows:(该操作可能会被安全软件阻止)右键Chrome快捷方式,然后点击“属性”,将命令行参数添加在“目标”栏的最后面即可,注意与主程序(Chrome.exe)之间有一个空格,命令行参数如下:(红字参数需手动修改)–unsafely-treat-insecure-origin-as-secure="http://ip:port" --user-data-dir=D:
2022-01-27 14:42:50
4493
原创 HTTP1.0和HTTP1.1和HTTP2.0的区别
HTTP1.0和HTTP1.1和HTTP2.0的区别1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启长连接keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。HTTP1.0需要
2021-11-29 10:49:42
424
原创 Golang模拟post接口请求
代码:package main import ( "fmt" gojsonq "github.com/thedevsaddam/gojsonq/v2" "io/ioutil" "log" "net/http" // "reflect" "strings")func main() { req, err := http.NewRequest("POST",
2021-09-27 10:29:58
440
原创 golang语言中map的初始化及使用
// 先声明mapvar m1 map[string]string// 再使用make函数创建一个非nil的map,nil map不能赋值m1 = make(map[string]string)// 最后给已声明的map赋值m1["a"] = "aa"m1["b"] = "bb"// 直接创建m2 := make(map[string]string)// 然后赋值m2["a"] = "aa"m2["b"] = "bb"// 初始化 + 赋值一体化m3 := map[string
2021-09-15 10:45:22
2382
原创 Golang简单写文件操作的四种方法
package mainimport ( "bufio" //缓存IO "fmt" "io" "io/ioutil" //io 工具包 "os")func check(e error) { if e != nil { panic(e) }}/** * 判断文件是否存在 存在返回 true 不存在返回false */func checkFileIsExist(filename string) bool { var exist = true if _, err :=
2021-09-10 17:12:12
584
原创 Golang框架选型比较: goframe, beego, iris和gin
由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件,需要项目使用的话得自己四处再去找找其他的组件,或者自己造轮子。如果用于Web开发,这些"框架"的Web开发能力均已完备,无太大差别,且均是自标准库net/http.Server的二次封装。由于框架众多,这里笔者只选择了几个曾做过技术选型评估、较为熟悉,且目前比较流行和典型的Golang"框架",从适用于业务项目开.
2021-08-06 16:27:26
3303
原创 Golang的range
go for range循环实例// setReqBodyLog 请求的body数据落日志func setReqBodyLog(ctx context.Context, req *http.Request) { formMap := map[string]string{} for k, v := range req.PostForm { for _, formV := range v { if formMap[k] == "" { formMap[k] = desensitizat
2021-08-06 11:03:39
3050
原创 go 解析身份证
package cardimport ( "encoding/json" "errors" "strconv" "strings" "time")//包括1980-2020年的所有行政区划代码var zone = `{"110000":"北京市","110101":"东城区","110102":"西城区","110103":"崇文区","110104":"宣武区","110105":"朝阳区","110106":"丰台区","110107":"石景山区","1101
2021-08-02 09:58:56
2250
原创 Golang中删除字符串的最后一个字符
package mainimport ( "fmt" "strings")func TrimSuffix(s, suffix string) string { if strings.HasSuffix(s, suffix) { s = s[:len(s)-len(suffix)] } return s}func main() { s := "a string ++" fmt.Println("s: ", s)
2021-07-29 14:59:19
1054
原创 Golang 字符串分割,替换和截取
package mainimport ( "fmt" "strings")func main() { str := "赵,钱,孙,李,赵" //字符串分割, 使用字符分割 str1 := strings.Split(str, ",") fmt.Println(str1[0]) //赵 fmt.Println(str1[1]) //钱 fmt.Println(str1[2]) //孙 fmt.Println(str1[3])
2021-07-29 14:37:58
2546
原创 Golang url的编码和解码
url 编码 (输入string) (返回string)strData := url.QueryEscape(str)url 解码 (输入string) (返回string,error)strData, err := url.QueryUnescape(urlStr)
2021-07-14 14:50:04
1495
原创 Golang json格式和结构体相互转换
结构体转换为jsondata, err := json.Marshal(req) // 返回[]byte,errfmt.Println(string(data))json转换为结构体err = json.Unmarshal([]byte(jsonStr), &resp)
2021-07-14 14:35:39
535
原创 Golang 中string和int类型相互转换
Golang 中 string 和 int 类型之间的相互转换方式:string转成int:int, err := strconv.Atoi(string)string转成int64:int64, err := strconv.ParseInt(string, 10, 64)int转成string:string := strconv.Itoa(int)int64转成string:string := strconv.FormatInt(int64,10)...
2021-07-14 11:47:26
259
原创 Golang 时间格式整理
// 时间格式整理func toTime(jcrq string) string { loc, _ := time.LoadLocation("Asia/Shanghai") //设置时区 tt, _ := time.ParseInLocation("2006-01-02 15:04:05", jcrq, loc) // 将时间字符串格式化为golang的"time.Time"对象 tm := time.Unix(tt.Unix(), 0) return tm.Format("2006-01-0.
2021-07-14 11:38:34
140
原创 WIN10 Docker 环境下安装Hyperf,高性能PHP协程框架
安装了Docker,Docker的安装网上有很多教程,这里就不赘述了,我们要对官方文档安装进行一定的修改以方便进行开发,以下是官方文档的安装的第一条命令。下载并运行 hyperf/hyperf 镜像,并将镜像内的项目目录绑定到宿主机的 /tmp/skeleton 目录docker run -v /tmp/skeleton:/hyperf-skeleton -p 9501:9501 -it --entrypoint /bin/sh hyperf/hyperf:latest-v 后面就是Docker容
2021-03-09 10:59:21
464
1
原创 docker 部署
docker run -p 80 --name web -i -t ubuntu /bin/bashapt-get updateapt-get install -y nginxapt-get install -y vimmkdir -p /var/www/htmlcd /var/www/htmlvim index.htmlwhereis nginxls /etc/nginxls /etc/nginx/sites-enabledvim /etc/nginx/sites-enabled/de
2021-03-05 17:06:49
60
原创 Linux常用命令详解
Linux常用命令大全 希望对大家有帮助最近想更深入的学习Linux于是看到了这篇文章,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核...
2021-03-02 15:31:16
356
原创 warning: LF will be replaced by CRLF in 解决办法
在windows下面提交和linux提交的换行符不一样windows中的换行符为 CRLF而在linux下的换行符为 LF,在windows下直接回车就会出现这个提示,修改的办法是把 core.autocrlf 设置成false解决办法:git config --global core.autocrlf false...
2021-02-23 10:52:25
403
原创 varchar与char有什么区别?
区别一,定长和变长char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。区别之二,存储的容量不同对 char 来说,最多能存放的字符个数 25
2021-02-19 18:01:52
151
原创 redis与memcached的区别
1)、数据支持类型Memcache对数据类型支持相对简单。Redis不仅仅支持简单的k/v类型的数据,同时还提供 string,list,set,sorted set,hash等数据结构的存储。2)、可靠性(持久化)Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。3)、使用底层模型不同它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM
2021-02-19 17:58:56
89
原创 大数据量的分页查询优化方案
背景随着业务发展越来越快,原来的数据从几万突破到几百万,分页的查询策略是否需要调整一下?数据准备1、表名:order_history2、描述:某个业务的订单历史表3、主要字段:unsigned int id,tinyint(4) int type4、字段情况:该表一共37个字段,不包含text等大型数据,最大为varchar(500),id字段为索引,且为递增。5、数据量:57092946、MySQL版本:5.7.16select count(*) from orders_histor
2021-02-19 16:54:33
257
原创 LAMP和LNMP架构(介绍)
目录工作原理架构介绍LAMP架构介绍LNMP架构介绍LAMP LNMP差别工作原理LAMP浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会将一些静态资源保存,然后调用php去处理模块进行php脚本的处理。脚本处理完后,Apache将处理完的信息通过http response的方式发送给浏览器,浏览器解析,渲染等一系列操作后呈现整个网页。LNMP浏览器发送http request请求到服
2021-02-02 15:28:00
1344
原创 SQL 注入详解
SQL 注入原理SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。SQL 注入分类1. 数字型注入当输入的参数为整型时,则有可能存在数字型注入漏洞。假设存在一条 URL 为:HTTP://www.aaa.com/test.php?id=1可以对后台的 SQL 语句猜测为:SELECT * FROM table WHERE i
2021-02-02 11:46:28
359
原创 Redis常见问题总结
1. 简单介绍一下 Redis 呗!简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。2. 分布式缓存常见的技术选型方案有哪些?分布式缓存的话,使用的比
2021-01-29 14:17:24
169
原创 乐观锁与悲观锁基础详解
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Jav
2021-01-29 10:30:49
187
1
道德经以哲学意义之“道德”为纲宗.pdf
2020-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人