golang
文章平均质量分 81
小陈工
菜鸟程序猿,求指导~
展开
-
Golang解决高并发情况下,HttpClient请求失败的问题
而且这些问题是很难去排查的,比如我最近遇到的这个BUG,在大规模高并发的生产环境下,排查日志会发现极少数的请求会失败,报错如下图所示,这是什么原因呢?总结只需要设置req.Close=true就可以解决这个BUG,虽然很简单,但是它背后所带来的高并发问题还是值得我们学习的,让我对高并发有了更深的理解。它会阻止连接被重用,可以有效的防止这个问题,也就是Http的短连接。经过排查我发现,造成问题的最可能原因是服务器正在关闭连接的时候又接收到新的请求,所以这个请求就被服务器拒绝而失败。...原创 2022-07-18 11:26:50 · 2609 阅读 · 1 评论 -
Goframe项目初始化
Goframe项目初始化原创 2022-07-12 16:05:24 · 810 阅读 · 0 评论 -
Go语言学习教程(十六)
一、死锁* 在主goroutine中向无缓存channel添加内容或在主goroutine中向channel添加内容且添加内容的个数已经大于channel缓存个数就会产生死锁 fatal error : all goroutines are asleep -deadlock!* 死锁:在程序中多个进程(Golang中goroutine)由于相互竞争资源而产生的阻塞(等待)状态,而这种状态一直保持下去,此时称这个线程是死锁状态* 在Golang中使用无缓存channel时一定要注意.以下是一个最简单的死原创 2022-07-05 17:27:40 · 157 阅读 · 0 评论 -
Go语言学习教程(十五)
一、线程休眠* Go语言中main()函数为主线程(协程),程序是从上向下执行的* 可以通过time包下的Sleep(n)让程序阻塞多少纳秒 //单位是纳秒,表示阻塞多长时间 //e9表示10的9次方 time.Sleep(1e9)二、延迟执行* 延迟指定时间后执行一次,但是需要注意在触发时程序没有结束 fmt.Println("开始") //2秒后执行匿名函数 time.AfterFunc(2e9, func() { fmt.Println("延迟延迟触发") })原创 2022-07-04 10:58:28 · 510 阅读 · 0 评论 -
Go语言学习教程(十三)
一、os包内容介绍* 使用os包中内容进行操作系统文件或目录* File结构体表示操作系统文件(夹)* 操作系统的文件都是有权限控制的,包含可读,可写等,在os包中FileMode表示文件权限,本质是uint32,可取值都以常量形式提供* FIleInfo是一个interface表示文件的信息* 在获取系统资源时资源路径分为相对路径和绝对路径* 相对路径:在Go语言中相对路径用于是GOPATH,也就是项目的根目录* 绝对路径:磁盘根目录开始表示资源详细路径的描述* 创建文件夹 /* 如果文件夹已原创 2022-06-29 10:55:24 · 319 阅读 · 0 评论 -
Go语言学习教程(十四)
一、反射介绍* 在Go语言标准库中reflect包提供了运行时反射,程序运行过程中动态操作结构体* 当变量存储结构体属性名称,想要对结构体这个属性赋值或查看时,就可以使用反射.* 反射还可以用作判断变量类型* 整个reflect包中最重要的两个类型 * reflect.Type 类型 * reflect.Value 值* 获取到Type和Value的函数 * reflect.TypeOf(interface{}) 返回Type * reflect.ValueOf(interface{原创 2022-06-27 10:58:07 · 501 阅读 · 0 评论 -
Go语言学习教程(十二)
一、断言* 只要实现了接口的全部方法就认为这个类型属于接口类型,如果编写一个接口,这个接口中没有任何方法,这时认为所有类型都实现了这个接口.所以Go语言中interface{}代表任意类型* 如果interface{}作为方法参数就可以接收任意类型,但是在程序中有时需要知道这个参数到底是什么类型,这个时候就需要使用断言* 断言使用时,使用interface{}变量点括号,括号中判断是否属于的类型 i interface{} i.(Type)* 断言的两大作用: * 判断是否是指定类型原创 2022-06-20 11:00:13 · 321 阅读 · 0 评论 -
Go语言学习教程(十一)
一、结构体指针* 由于结构体是值类型,在方法传递时希望传递结构体地址,可以使用时结构体指针完成* 可以结合new(T)函数创建结构体指针 peo := new(People) //因为结构体本质是值类型,所以创建结构体指针时已经开辟了内存空间 fmt.Println(peo == nil) //输出:false //由于结构体中属性并不是指针类型,所以可以直接调用 peo.Name = "smallming" fmt.Println(peo)//输出:&{smallmin原创 2022-06-17 16:33:20 · 169 阅读 · 0 评论 -
Go语言学习教程(十)
一、匿名函数* 匿名函数就是没有名称的函数* 正常函数可以通过名称多次调用,而匿名函数由于没有函数名,所以大部分情况都是在当前位置声明并立即调用(函数变量除外)* 匿名函数声明完需要调用,在函数结束大括号后面紧跟小括号* 无参数匿名函数 func main(){ func(){ fmt.Println("这是匿名函数") }()//括号表示调用 }* 有参数匿名函数func main() { func(s string) { fmt.Println(s, "这原创 2022-06-16 10:57:30 · 148 阅读 · 1 评论 -
Go语言学习教程(九)
一、双向链表概述* 双向链表结构中元素在内存中不是紧邻空间,而是每个元素中存放上一个元素和后一个元素的地址 * 第一个元素称为头(head)元素,前连接(前置指针域)为nil * 最后一个元素称为尾(foot)元素,后连接(后置指针域)为nil* 双向链表的优点: * 在执行新增元素或删除元素时效率高,获取任意一个元素,可以方便的在这个元素前后插入元素 * 充分利用内存空间,实现内存灵活管理 * 可实现正序和逆序遍历 * 头元素和尾元素新增或删除时效率较高* 双向链表的缺原创 2022-06-15 10:57:40 · 256 阅读 · 1 评论 -
Go语言学习教程(八)
一、goto* goto是Go语言中的一个关键字* goto让编译器执行时跳转到特定位置 * Loop是标记名(Label),名称任意,习惯上名称为Loop fmt.Println("执行程序") i := 6 if i == 6 { goto Loop } fmt.Println("if下面输出")Loop: fmt.Println("loop")* 可以有多个,但是标签(Labal)定义了就必须使用二、切片* 切片的英文名称slice* 切片是具有原创 2022-06-14 10:55:24 · 1744 阅读 · 0 评论 -
Go语言学习教程(七)
一、数组介绍* 数组:具有固定长度相同类型元素序列* 声明数组的语法 //var 对象名 [长度]元素类型 var arr [5]int fmt.Println(arr) //输出:[0 0 0 0 0]* 数组就是内存中一段固定长度的连续空间.* 声明数组后数组就会在内存中开辟一块连续空间,每个值称为数组的元素,且元素值为类型对应的默认值.例如int类型默认值为0,string类型默认值为空字符串* 数组中每个元素按照顺序都有自己整数类型的脚标,脚标从第一个元素为0向后依次加1* 数组在原创 2022-06-13 13:39:56 · 155 阅读 · 0 评论 -
Go语言学习教程(六)
一、switch结构介绍* switch也属于条件判断的语句* 支持多种写法,和if .. else if ...else 结构的功能类似,但是里面的细节需要注意的地方更多* switch基本语法switch [定义变量;] [变量]{ case [条件/具体值]: //代码 case [条件/具体值]: //代码 default: //代码}* switch每个case分支默认只执行一个且是从上向下执行* default上下位置没有影响,当且仅当所有case都不成立时才执行原创 2022-06-10 11:00:54 · 373 阅读 · 0 评论 -
Go语言学习教程(五)
一、常量概述* 常量是一个固定值,在编译器就确定结果.声明时必须赋值且结果不可以改变.* 因为常量在编译器就确定,可以防止程序运行过程中意外修改* 常量关键字const* 常量定义完可以不使用* Go语言中常量定义没有明确语法要求,可以不全大写,驼峰即可.* 很多内容可以定义成常量 * 人名 * 圆周率 * 电话号 * 等二、常量定义* 定义常量时如果不是必须指定特定类型,可以省略类型,使用默认类型,且数值类型常量(不定义类型)可以直接进行运算* 常量的值可以是表达式,但是不允许出现原创 2022-06-09 14:24:50 · 750 阅读 · 1 评论 -
Go语言学习教程(四)
一、位运算符概述原创 2022-06-08 13:29:39 · 367 阅读 · 0 评论 -
Go语言学习教程(三)
一、整型概述* 在Go语言中可以进行数学运算的类型分为整型和浮点型* 所有的整数数字存储到整型中就可以进行数学运算 * 整型和整型运算的结果还是整型.(5/2=2) * 都是整型,但是int8和int16之间不可以进行运算,必须进行类型转换* 整型分为有符号整型和无符号整型 * 有符号整型有正数和负数.其二进制最高位表示符号,0为正数1为负数.int和intx为有符号整型 * 无符号整型只能取大于等于0的整数.其二进制最高位表示真实数字.unit和unitx为无符号整型* 整型取值范原创 2022-06-07 10:50:04 · 585 阅读 · 0 评论 -
Go语言学习教程(二)
为什么使用开发工具原创 2022-06-06 07:16:30 · 715 阅读 · 0 评论 -
Go语言学习教程(一)
一、Go语言简介Go语言是谷歌公司于2009年11月发布的编程语言。Go语言是一种开源的程序设计语言,它使得开发者可以方便地构建简单、可靠、高效的软件。二、Go语言优势* 语法简单* 可以直接编译成机器码* 静态数据类型和编译语言* 内置支持并发* 内置垃圾回收* 部署简单* 强大的标准库三、Go语言适用场景* 服务器编程.实现日志处理,虚拟机处理,文件处理等* 分布式系统或数据库代理* 网络编程,包含web应用* 云平台四、Go语言下载4.1 可以通过Go语言中文网进行加载资源和交流Go语言技术网址:ht原创 2022-06-05 08:40:42 · 491 阅读 · 0 评论