
go
文章平均质量分 87
hzulwy
技术嘛!最重要的是自己理解,然后才是分享
展开
-
Go协程的运行机制以及并发模型
在下面这个例子中,atomic.CompareAndSwapInt64会判断flag变量的值是否为0,如果是0,则将flag的值设置为1.这一系列操作都是原子性的,不会发生数据争用,也不会出现内存操作乱序问题。因此准确的说,Go语言中的协程是从属某一个线程的,只有协程和实际线程绑定,才有执行的机会。由于在同一时间内只能有一个协程获取互斥锁并执行操作,因此在多读少写的情况下,如果长时间没有写操作,读取到的会是完全相同的值,使用互斥锁就显得没有必要了,这时使用读写锁更加恰当。原创 2024-07-23 12:04:30 · 1227 阅读 · 1 评论 -
Gin框架入门
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。原创 2023-08-23 11:47:11 · 399 阅读 · 0 评论 -
Go语言里面的各种疑难杂症
而传递切片时,只是将切片的引用(指针)传递给函数,因此不会复制整个切片的内容,函数内部对切片进行的修改会反映到原始切片中。需要注意的是,defer延迟执行的函数调用参数在defer语句出现时就会求值,而不是在函数返回时才求值。长度固定 vs. 长度可变:数组的长度是固定的,定义时需要指定长度,并且无法修改。数据存储方式:数组的元素在内存中是连续存储的,而切片则是一个对数组的引用,并包含了指向底层数组的指针、长度和容量等信息。如果不定参数传入了0个值,那么在方法内部,不定参数的长度为0,即切片的长度为0。原创 2023-08-22 05:49:34 · 502 阅读 · 0 评论 -
Go基本知识大解析
reflect.Value中的Interface方法以空接口的形式返回reflect.Value中的值。如果需要进一步获取空接口的真实值,那么可以通过空接口的断言语法对接口进行转换。这些特殊的方法可以加快转换的速度。反射的两个重要类型为reflect.Value(表示反射的值)和reflect.Type(表示反射的类型)。接口在Go语言中是实现模块解耦、代码复用和控制系统复杂度的重要手段,因此,了解接口的使用方法和应用场景至关重要。Go语言中的接口分为两种类型:带方法的接口和空接口(不考虑泛型的情况)。原创 2023-08-11 11:09:27 · 249 阅读 · 0 评论 -
Golang函数以及函数和方法的区别
我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平方的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。这里的接收者和c++中的this指针有一些相似,我们可以把接受者当作一个class,而这些方法就是类的成员函数,当接收者为指针类型是就是c++中的非const成员函数,为非指针时就是const成员函数,不能通过此方法改变类的成员变量。原创 2023-08-11 10:32:01 · 670 阅读 · 0 评论