-
在使用VScode编译多个go文件多次遇到过一个问题:无法找到对应的函数。具体提示在好像是:在GOPATH和GOROOT路径中都没有找到该package或者该函数。但是实际上,这个函数所在的go文件就在我的工...
使用教程 2022-11-25 -
Slice(切片)切片和数组类似,可以把它理解为动态数组。切片是基于数组实现的,它的底层就是一个数组。对数组任意分隔,就可以得到一个切片。现在我们通过一个例子来更好地理解它,同样还是基于前面的array。基于数组生成切片下面代码中的array[2:5]就是获取一个切片的操作,它包含从数组a...
使用教程 2022-11-25 -
什么是死锁,在Go的协程里面死锁通常就是永久阻塞了,你拿着我的东西,要我先给你然后再给我,我拿着你的东西又让你先给我,不然就不给你。我俩都这么想,这事就解决不了了。第一种情形:无缓存能力的管道,自己写完自己读先上代码:funcmain(){ch:=make(chanint,...
使用教程 2022-11-25 -
一panic机制 panic会将这个异常不断向上抛出,直到有地方处理它,如果有处理,则不会再向上抛出。倘若没有处理,那么最终会导致main挂掉. golang虽然没有trycatch机制,却有一种类似的recover机制,后续demo我们可以观测到它的用法和作用二实例 2.1...
使用教程 2022-11-25 -
互斥锁简单粗暴,谁拿到谁操作。今天给大家介绍一下读写锁,读写锁比互斥锁略微复杂一些,不过我相信我们今天能够把他拿下!golang读写锁,其特征在于读锁:可以同时进行多个协程读操作,不允许写操作写锁:只允许同时有一个协程进行写操作,不允许其他写操作和读操作读写锁有两种模式。没错!一种是读模...
使用教程 2022-11-25 -
与其他主流语言如Javascript、Java和Python相比,Golang的错误处理方式可能和这些你熟悉的语言有所不同。所以才有了这个想法根大家聊一聊golang的错误处理方式,以及实际开发中应该如何对错误进行处理。因为分享面对Golang有一个基本的了解developers,所以一些简单地...
使用教程 2022-11-25 -
死锁死锁的4个条件不可剥夺线程已经获得的资源,在未使用完之前,不能被其他线程剥夺,只能在使用完后自己释放。请求保持线程T1保持了一个资源R1占用,但是又提出另外一个资源R2请求,此时,资源R2被线程T2占用,于是T1线程必须等待,但又对自己保持的R...
使用教程 2022-11-25 -
强类型语言有它的优势,但也有不便利的地方,最典型的就是类型转换。Golang作为一门强类型语言,而且不支持隐式类型转换,因此这个问题更突出。虽然Go提供了不少方式进行类型转换,包括相关的标准库,比如strconv包。然而,strconv包使用没那么方便,比如"8"转为int类型:s...
使用教程 2022-11-25 -
前言先来看一道面试题:对已经关闭的chan进行读写,会怎么样?为什么?在上一篇学习Go协程的文章中,知道go关键字可以用来开启一个goroutine进行任务处理,但多个任务之间如果需要通信,就需要用到通道(channel)了。一、Channel的定义声明并初始化一个通...
使用教程 2022-11-25 -
Switch简介Go的switch的基本功能和C、Java类似:switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。匹配项后面也不需要再加break。特点:switch默认情况下case最后自带break语句,...
使用教程 2022-11-25 -
说明 在golang中,时间转换都会通过Time类型做一系列转换。主要包含,时间戳和时间字符串,时间字符串转换成另外的格式。总之所有的转换都是通过Time类型做中间转换。参考文档:https://golang.org/pkg/time/操作1,获取当...
使用教程 2022-11-25 -
1.需求要求统计1-200000的数字中,哪些是素数?这个问题在本章开篇就提出来了,可以使用goroutine和channel来完成2.分析思路传统的方法,就是使用一个循环,循环的判断各个数是不是素数【ok】使用并发/并行的方式,将统计素数的任务分配给多个(x个)goroutine去完成,完成任务...
使用教程 2022-11-25 -
一、需求实现二级缓存程序运行起来后提示:“请输入命令:”,如果输入getall,查询并显示所有人员的信息第一次时查询mysql并将结果缓存在redis,设置60秒的过期时间以后的每次查询,如果redis有数据就从redis加载,没有则重复上一步的操作二、实现连接Mysql并执行查...
使用教程 2022-11-25 -
哈希算法 md5128bit,16字节如:md5(“helloworld!”)=fc3ff98e8c6a0d3087d515c0473f8677//32位16进制数字funcTest(t*testing.T){//方法一str:="hell...
使用教程 2022-11-25 -
本文主要针对Golang的内置库net/http做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件的形式添加一些功能到管道中,一次请求和响应在管道中的执行过程如下首先,我定义了三个测试的中间件Midd...
使用教程 2022-11-25 -
Go协程超时控制Select阻塞方式Context方式先说个场景:假设业务中A服务需要调用服务B,要求设置5s超时,那么如何优雅实现?Select超时控制考虑是否可以用select+time.After方式进行实现这里主要利用的是通道在携程之间通信...
使用教程 2022-11-25 -
算数运算符算数运算符和C语言几乎一样运算符描述实例+相加A+B-相减A-B*相乘A*B...
使用教程 2022-11-25 -
普通指针和C语言一样,允许用一个变量来存放其它变量的地址,这种专门用于存储其它变量地址的变量,我们称之为指针变量和C语言一样,Go语言中的指针无论是什么类型占用内存都一样(32位4个字节,64位8个字节)packagemainimport("fmt""u...
使用教程 2022-11-25 -
异常处理程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常golang中提供了两种处理异常的方式一种是程序发生异常时,将异常信息反馈给使用者一种是程序发生异常时,立刻退出终止程序继续运行打印异常信息Go语言中...
使用教程 2022-11-25 -
查看官方文档,官方自带的演示://官方演示packagemainimport("archive/tar""bytes""fmt""io""log""os")funcmain(){//将...
使用教程 2022-11-25 -
一、语言结构和注意事项packagemain//声明main包,表明当前是一个可执行程序import"fmt"//导入内置的fmt包funcmain(){//main函数,是程序执行的入口fmt.Println("HelloWorld!")//...
使用教程 2022-11-25 -
一.序单从库名大概就能猜出其作用。sync.Once使用起来很简单,下面是一个简单的使用案例packagemainimport("fmt""sync")funcmain(){var(oncesync.Oncewgsync.Wa...
使用教程 2022-11-25 -
前言今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过。希望这篇文章能够让你理解环境变量并掌握Go环境变量相关操作。01从安装Go说起其实不止是安装Go,其他语言一本也会有类似的问题。一般来说,安装完Go后,会建议将go可执行程序配置到PATH环境变量中。...
使用教程 2022-11-25 -
先来看这样一段代码,所存在的问题:varwgsync.WaitGroupvarxint64funcmain(){wg.Add(2)gof()gof()wg.Wait()fmt.Println(x)//输出:12135}funcf(...
使用教程 2022-11-25