go的学习
文章平均质量分 58
大熊的饲养员
这个作者很懒,什么都没留下…
展开
-
go语言中的堆和栈
go语言虽然变量申请在堆空间上,但是他有自动回收垃圾的功能,所以这些堆地址空间也无需手动回收,系统会在需要释放的时刻自动进行垃圾回收。堆:一般由程序员手动释放,若程序结束时未释放,将由os自动回收,分配方式类似于链表。(在数据结构中的堆是个树)栈:由编译器自动分配与释放,存储函数的参数或局部变量的值,类似于数据结构中的栈。并不是定义在函数内部的局部变量在访问退出时就被回收。原创 2023-01-03 08:04:27 · 798 阅读 · 0 评论 -
基于Go语言的网盘开发(GloudDisk)
用go语言实现一个简单的云存储,基于COS,涉及到MD5,uuid,jwt等内容原创 2022-11-30 21:50:57 · 2457 阅读 · 0 评论 -
gin框架的介绍与使用
Gin框架介绍Gin框架安装与使用安装RESTful APIGin渲染HTML渲染自定义模板函数静态文件处理获取当前执行程序的路径JSON渲染XML渲染YMAL渲染protobuf渲染获取参数获取querystring参数获取form参数获取json参数获取path参数参数绑定文件上传单个文件上传多个文件上传重定向HTTP重定向路由重定向Gin路由普通路由路由组Gin中间件定义中间件注册中间中间件注意事项转载 2022-10-06 14:56:15 · 353 阅读 · 0 评论 -
golang程序中的相对路径与绝对路径问题
golang程序中的相对路径与绝对路径问题“./” 是当前的工程目录,并不是该go文件所对应的目录package filepath。filepath包实现了兼容各操作系统的文件路径的实用操作函数。原创 2022-08-29 12:46:40 · 1639 阅读 · 0 评论 -
go语言之MongoDB的插入查找更新和删除
MongoDB的安装与使用,用goland进行mongodb的插入更新查找和删除原创 2022-08-06 18:04:16 · 1005 阅读 · 0 评论 -
golang数据库的操作,更新删除增加单行查找与多行查找
golang数据库的操作,更新删除增加单行查找与多行查找原创 2022-08-05 17:53:23 · 657 阅读 · 0 评论 -
golang的mysql数据库连接
Go MySQL Driver是Go接口的实现。只需要导入驱动程序,然后就可以使用完整的数据库API。最完整的DSNusername:password@protocol(address)/dbname?param=valueq其中密码可以包含任何字符,无需转义。除数据库名称外,所有值都是可选的。因此,最小DSN是:/dbname如果不想预先选择数据库,请留空:dbname这与空 DSN 字符串具有相同的效果db.SetConnMaxLifetime()db.Ping()数据库连接实例:...原创 2022-08-05 16:32:06 · 730 阅读 · 0 评论 -
临界资源安全问题与sync包下的锁操作
如果多个goroutine在访问同一个数据资源的时候,其中一个线程修改了数据,那么这个数值就被修改了,对于其他的goroutine来讲,这个数值可能是不对的。我们通过并发来实现火车站售票这个程序。一共有100张票,4个售票口同时出售Go语言包中的sync包提供了两种锁类型:sync.Mutex和sync.RWMuWaitGroup同步等待组接下来我们针对模拟4个售票口出售火车票的案例,使用goroutine。4个售票口同时卖票,会发生临界资源数据安全问题。我们使用互斥锁解决一下。(Go语言推崇的是使...原创 2022-07-25 11:23:18 · 637 阅读 · 0 评论 -
goroutine知识点与runtime包
go语言的并发:go关键字系统自动创建并启动主goroutine,执行对应的main()用于自己创建并启动子goroutine,执行对应的函数go 函数()//go关键创建并启动goroutine,然后执行对应的函数(),该函数执行结束子goroutine也随之结束。子goroutine中执行的函数,往往没有返回值。如果有也会被舍弃。并发的程序的运行结果,每次都不一定相同。不同计算机设备执行,效果也不相同。NumCPU:返回当前系统的CPU核数量GOMAXPROCS:设置最大的可同时使用的CPU...原创 2022-07-25 10:44:23 · 317 阅读 · 0 评论 -
Go语言的断点续传
Seeker是包装基本Seek方法的接口。通过断点续传可以实现:传的文件比较大,缩短耗时; 在文件传递过程中,如果被迫中断,那么下次再重启时,文件不需要重头开始,支持暂停和恢复。当然这些都是通过Seek()方法如何实现:先说一下思路:想实现断点续传,主要就是记住上一次已经传递了多少数据,那我们可以创建一个临时文件,记录已经传递的数据量,当恢复传递的时候,先从临时文件中读取上次已经传递的数据量,然后通过Seek()方法,设置到该读和该写的位置,再继续传递数据。...原创 2022-07-20 10:28:19 · 931 阅读 · 0 评论 -
go语言中的读写操作以及文件的复制
file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现。在io包中主要是操作流的一些方法,今天主要学习一下copy。就是把一个文件复制到另一个目录下。它的原理就是通过程序,从源文件读取文件中的数据,在写出到目标文件里。方法一:io包下的Read()和Write()方法实现方法二:io包下的Copy()方法实现方法三:ioutil包使用ioutil包中的ioutil.WriteFile()和 ioutil.ReadFile(),但由于使用一次性读取文件,再一次性写入.原创 2022-07-20 10:19:20 · 1013 阅读 · 0 评论 -
Go语言中的File文件操作
file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现。1、FileInfo接口2、打开模式os.MkDirAll(),可以创建多层创建文件,Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它os.Create(),创建文件打开文件:让当前的程序,和指定的文件之间建立一个os.Open(filename)5.关闭文件:程序和文件之间的链接断file.Closeos.Remove(),删除文件和空目录...原创 2022-07-20 10:07:25 · 1793 阅读 · 0 评论 -
go语言错误和异常处理,panic、defer、recover的执行顺序
当外围函数的代码中发生了运行恐慌,只有其中所有的已经defer的函数全部都执行完毕后,该运行恐慌才会真正被扩展至调用处。以下给出异常处理的作用域(场景):空指针引用下标越界除数为0不应该出现的分支,比如default输入不应该引起函数错误说明: Golang错误处理方式一直是很多人诟病的地方,有些人吐槽说一半的代码都是"if err != nil { / 打印 && 错误处理 / }",严重影响正常的处理逻辑。Golang错误和异常是可以互相转换的:...原创 2022-07-15 11:29:01 · 1897 阅读 · 0 评论 -
go语言中的函数声明使用参数的使用可变参参数传递函数的返回值空白标识符函数的作用域函数的本质defer函数延迟 延迟方法延迟参数堆栈的推迟defer注意点匿名函数回调函数闭包
函数的概念什么是函数 函数的声明函数的使用函数的参数参数的使用可变参参数传递函数的返回值什么是函数的返回值一个函数可以返回多个值 空白标识符函数的作用域局部变量全局变量函数的本质defer函数延迟是什么?延迟函数延迟方法延迟参数 堆栈的推迟defer注意点匿名函回调函数闭包...原创 2022-07-13 10:18:18 · 311 阅读 · 0 评论 -
go语言中strings包下的关于字符串的函数
go语言中strings包下的关于字符串的函数、判断字符串中是否包含指定的内容-->bool、判断是否包含chars中任意的一个字符即可统计substr在s中出现的次数以xxx前缀开头,以xxx后缀结尾//查找substr在s中的位置,如果不存在就返回-1查找chars中任意的一个字符,出现在s中的位置查找substr在s中字符串的拼接切割重复,自己拼接自己count次替换截取子串...原创 2022-07-13 08:51:04 · 434 阅读 · 0 评论 -
Go语言实现从2-100的素数
素数就是质数,只能被1和本身整除方法就是利用两个for循环,首先让 i 从2开始到100结束,标志flag为true,接下来嵌套y的for循环,让y从2开始,条件是y要小于根号下i,如果i取余y等于0,那就证明y能被i整除,那么此时就让flag=false即不是素数。...原创 2022-07-11 17:47:11 · 588 阅读 · 0 评论 -
Go语言中的fallthrough使用
在switch ... case ... 使用过程中,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch,但是可以使用fallthrough强制执行后面的case代码break:可以使用在switch中,也可以使用在for循环中 强制结束case语句,从而结束switch分支 fallthrough:用于穿透switch 当switch中某个case匹配成功之后,就执行该case语句...原创 2022-07-11 15:24:39 · 1232 阅读 · 0 评论 -
GO、Java编程语言实现水仙花数
利用 math.Pow(x,y)方法。最简单的实现代码就是用GOJava语言实现水仙花数三个for循环进行实现水仙花数水仙花数:每个位上的数字的立方和,刚好等于该数字本身。那么就叫做水仙花数。且水仙花数一共有4个(153,370,371,407),并且是在【100,999】的三位数。...原创 2022-07-11 15:00:38 · 485 阅读 · 0 评论 -
Go语言中的伪随机数和真随机数
go语言时间戳Go语言中的伪随机数和真随机数go中生成随机数的有两个包,分别是“math/rand”(伪随机数生成器)和“crypto/rand”(用于加解密的跟安全的随机数生成器)初始化随机种子函数由此可见如果不调用seed,seed就会一直是1。这就是为什么是伪随机数。Unix将t表示为Unix时间,使用rand.NewSource()rand.Seed(time.Now().Unix())作rand.Seed(time.Now().UnixNano())...原创 2022-07-10 15:28:32 · 1208 阅读 · 0 评论 -
GO语言中的输入和输出fmt包和bufio包
os.Stdin指向标准输入文件/dev/stdin,即os.Stdin是标准输入文件/dev/stdin的指针。os.Stdin是os包File结构体的指针类型。fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb('verb')源自C语言但更简单。bufio包读取Package bufio - The Go Programming Languagebufio包中都是IO操作的方法:...原创 2022-07-10 09:35:41 · 441 阅读 · 0 评论 -
位运算符按位&按位|异或^位清空:&^ 位移运算符
位运算符是什么意思:将数值,转为二进制后,按位操作各个符号意思:按位&:对应位的值如果都为1才为1,有一个为0就为0按位|:对应位的值如果都是0才为0,有一个为1就为1异或^: 二元:a^b 对应位的值不同为1,相同为0 一元:^a 按位取反: 1--->0 0--->1位清空:&^对于 a &^ b 对于b上的每个数值 如果为0,则取a对应位上的数值 ...原创 2022-07-10 08:38:44 · 428 阅读 · 0 评论 -
编程时格式化打印占位符%v%s%t%T%d的含义
格式化打印占位符: %v,原样输出 %T,打印类型 %t,bool类型 %s,字符串 %f,浮点 %d,10进制的整数 %b,2进制的整数 %o,8进制 %x,%X,16进制 %x:0-9,a-f %X:0-9,A-F %c,打印字符 %p,打印地址 。。。...原创 2022-07-09 20:16:22 · 6010 阅读 · 0 评论 -
Go的执行原理
Go的执行原理,Go的源码文件分为命令源码文件库源码文件测试源码文件命令源码文件应该是被单独放在一个代码包中,是可以单独运行的。可以使用go run命令直接运行,也可以通过go build或go install命令得到相应的可执行文件。但是多个命令源码文件虽然可以分开单独go run运行起来,但是无法通过go build和go install。所以命令源码文件是可以在机器的任何目录下运行的。_test.go为后缀的代码文件,并且必须包含Test或者Benchmark名称前缀...原创 2022-07-09 15:03:02 · 380 阅读 · 0 评论 -
golang学习中那些太遗憾没早点知道的使用VsCode的快捷方法
golang学习中那些太遗憾没早点知道的使用VsCode的快捷方法快速建文件并用vscode打开,加快敲代码速度的小技巧原创 2022-06-10 17:16:29 · 362 阅读 · 3 评论 -
go语言实现两道简单算法题
go语言实现两道简单算法题原创 2022-05-02 22:43:36 · 442 阅读 · 0 评论 -
两两交换链表中的节点(go语言)
go语言题解 两两交换链表中的节点 算法原创 2022-05-02 22:38:56 · 771 阅读 · 0 评论 -
删除链表的倒数第N个结点(go语言)
go语言题解: 删除链表的倒数第N个结点 算法。原创 2022-05-02 22:28:13 · 1034 阅读 · 0 评论 -
golang语言中的channel语法
golang语言中的channel语法有缓冲无缓冲,单向双向,newtimer,time。aftertimer.Stop,select上述语法的容量应该大于0,以便通道具有缓冲区。默认情况下,无缓冲通道的容量为0,因此在之前创建通道时省略了容量参数。如果不关闭的话,就会出现死锁。因为子 go 中都已放入暖冲后没有可用的供给 main go就会导致main go一直等待。单流程下一个 go 只能监控一个 channel 的状态,select 可以完成监控多个 channel 的状态。...原创 2022-04-30 11:32:41 · 2130 阅读 · 0 评论 -
golang 对协程的处理 ----- goroution
golang 对协程的处理 ----- goroution的创建与退出原创 2022-04-29 10:52:57 · 233 阅读 · 0 评论 -
结构体标签在json中的应用----json编解码
结构体标签在json中的应用----json编解码。json.Marshal ()方法和 json.Unmarshal()方法原创 2022-04-28 10:41:13 · 506 阅读 · 0 评论 -
对于reflect: Elem of invalid type main.User类型的错误解释
golang中出现reflect: Elem of invalid type main.User的原因原创 2022-04-22 11:41:27 · 1697 阅读 · 1 评论 -
golang的反射
golang的反射机制,通过TypeOf()和ValueOf()方法获得type和value,通过遍历NumField来获得每个属性的类型和value本来可以用结构体对象.方法名称()直接调用的,但是如果要通过反射,那么首先要将方法注册,也就是MethodByName,然后通过反射调动mv.Call。要通过反射来调用起对应的方法,必须要先通过reflect.ValueOf(interface)来获取到reflect.Value,得到“反射类型对象”后才能做下一步处理...原创 2022-04-22 11:41:52 · 1083 阅读 · 0 评论 -
面向对象的go语言
golang面向对象的语言,类的继承封装多态,还有interface{}万能类型,interface{}的断言机制,golang的结构体原创 2022-04-19 11:26:07 · 234 阅读 · 0 评论 -
golang中的map
golang中map的声明定义,添加、删除、修改、遍历以及传递方法介绍ok-idiom原创 2022-04-15 16:36:07 · 1552 阅读 · 0 评论 -
slice切片的四种声明定义方式,切片的截取、修改与追加
切片Slice:1.每一个切片引用了一个底层数组2.切片本身不存储任何数据,都是这个底层数组存空切片:一个切片在未初始化之前默认为 nil,长度为 0 make(1,2,3):1.表示类型,2.表示长度,3.表示容量使用append进行追加,代码如下注意:当cap(容量)满了的时候再去追加,cap会自动变成原来的两倍。总结,如下图将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片(前闭后开),长度为endIndex-startIndex缺省eslice切片的四种声明定义方原创 2022-04-15 08:32:53 · 957 阅读 · 0 评论 -
golang中的数组与动态数组区别(切片slice)
golang中的数组与动态数组区别(切片slice)原创 2022-04-14 15:00:50 · 163 阅读 · 0 评论 -
return、defer语句调用顺序
defer的基本知识点,defer的调用顺序,defer与return哪个先执行defer与return的执行顺序是固定的,且只有一个答案:retrun表达式->defer->return(RTE指令)原创 2022-04-14 09:52:55 · 392 阅读 · 0 评论 -
golang中的指针
golang指针问题指针的概念 获取变量的地址 声明指针空指针获取指针的值操作指针改变变量的数值使用指针传递函数的参数指针的指针指针函数与函数指针原创 2022-04-13 18:37:22 · 1165 阅读 · 0 评论 -
import导包方法和路径问题和init方法调用流程
import导包的三种方法和导包时路径问题和init方法调用流程,以及为什么会报lib1test not exported by package lib1错误原创 2022-04-13 17:56:59 · 831 阅读 · 0 评论 -
go中函数的多返回值的三种写法
go中函数的多返回值的三种写法以及注意事项原创 2022-04-13 15:29:29 · 903 阅读 · 0 评论