go
go lang
【Help】
这个作者很懒,什么都没留下…
展开
-
gorm 一对多
【代码】gorm 一对多。原创 2024-06-20 15:13:46 · 275 阅读 · 0 评论 -
gorm 一对一操作
通过gorm标签来指定外键(属于关系:关系和外键的指定不在同一方)通过gorm标签来指定外键(属于关系:关系和外键的指定在同一方)通过Debug()可以看到底层对应执行的Sql是什么样子。原创 2024-06-20 14:39:19 · 273 阅读 · 0 评论 -
gorm 增删改查
【代码】gorm 增删改查。原创 2024-06-20 11:46:36 · 346 阅读 · 0 评论 -
gorm简介
即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。gorm是go语言的一个orm框架,Golang写的,开发人员友好的ORM库。【1】创建一个数据库:testgorm。录入安装GORM的命令。原创 2024-06-20 11:34:32 · 294 阅读 · 0 评论 -
Go Gin框架
Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter,速度提高了近 40 倍。访问Gin官方中文文档。原创 2024-06-14 15:32:32 · 397 阅读 · 2 评论 -
defer+recover机制处理错误
解决办法:利用defer+recover捕获panic进行处理,即使协程出现错误,主线程仍然不受影响可以继续执行。问题:多个协程工作,其中一个协程出现panic,导致程序崩溃。原创 2024-06-13 16:35:05 · 471 阅读 · 0 评论 -
管道(channel)select
只要有其中一个满足条件,就执行相应的逻辑,一般会写个for,里面加入select进行监听多个channel,如果有数据就执行对应的逻辑操作。select功能:解决多个管道的选择问题,也可以叫多路复用,可以从多个管道中随机公平的选择一个来执行。case后面必须进行的是io操作,不能是等值,随机去选择一个io操作。default防止select被阻塞,加入default。原创 2024-06-13 16:20:20 · 285 阅读 · 0 评论 -
管道(channel)和协程案例
2、开启一个readData协程,从管道中读取writeData写入的数据。4、主线程需要等待writeData和readDate协程都完成工作才退出。3、注意:writeData和readDate操作的是同一个管道。1、开启一个writeData协程,向管道中写入50个整数。原创 2024-06-13 15:28:01 · 177 阅读 · 0 评论 -
管道(channel)的关闭
使用内置函数close可以关闭管道,当管道关闭后,就不能再向管道写入数据了,但是仍然可以从该管道读取数据。(类似商城排队限流,一旦进去10个人后,保安拉取一个警戒线,不准外面的人在进入了,但是里面进去的10个人,仍然可以进行操作)原创 2024-06-13 14:46:03 · 182 阅读 · 0 评论 -
管道(channel)入门
2:数据类型指的是管道的类型,里面放入数据的类型,管道是有类型的,intChan只能写入整数int。3、自身线程安全,多协程访问时不需要加锁,channel本身就是线程安全的。4、管道有类型的,一个string的管道,只能存放string类型的数据。3:管道是引用类型,必须初始化才能写入数据,即make后才能使用。1、管道本质就是一个数据结构-队列。var 变量名 chan 数据类型。管道(Channel)1:chan管道关键字。原创 2024-06-13 14:34:14 · 252 阅读 · 0 评论 -
多个协程操纵同一个数据2个锁【互斥锁】【读写锁】
其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再对其进行加锁,直到利用Unlock()解锁对其解锁后,才能再次加锁,适用于读写不确定场景,即读写次数没有明显的区别。有一个机制:确保:一个协程在执行逻辑的时候,另外的协程不执行 ---》锁的机制---》加入互斥锁。【1】互斥锁(和上厕所一样,用的时候把门锁上,不用的时候把门给关上)----在读的时候,数据之间不产生影响,写和读之间才会产生影响。有读有写,在写的过程中,锁生效,但是读可以并发读,没有影响。原创 2024-06-13 11:05:39 · 244 阅读 · 0 评论 -
go 协程
协程又称为微线程,作用:在执行A函数的时候,可以随时中断,去执行B函数,然后中断继续执行A函数(可以自动切换),注意这一切换过程并不是函数调用(没有调用语句),过程很像多线程,然而协程中只有一个线程在执行(协程的本质是单线程)。线程是CUP控制的,而协程是程序自身控制的,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级。如果内部计算器变为0,Wait方法阻塞等待的所有线程都会释放,如果计数器小于0,方法panic。注意Add加上正数的调用应在Wait之前,否则Wait可能只会等待很少的线程。原创 2024-06-13 10:09:55 · 448 阅读 · 0 评论 -
Go API
Go语言提供了大量的标准库,因此 google 公司也为这些标准库提供了相应的API文档,用于告诉开发者如何使用这些标准库,以及标准库包含的方法。官方位置:https://golang.org。Golang中文网在线标准库文档: https://studygolang.com/pkgdoc。原创 2024-06-12 16:14:52 · 599 阅读 · 0 评论 -
Go 断言
在 Go 语言中,(Assertion)是一种类型转换的方式,它用于将一个接口类型转换为其他类型。原创 2024-06-12 16:06:57 · 227 阅读 · 0 评论 -
映射map
delete(map,"key") , delete是一个内置函数,如果key存在,就删除该key-value,如果k的y不存在,不操作,但是也不会报错。PS:key、value的类型:bool、数字、string、指针、channel 、还可以是只包含前面几个类型的接口、结构体、数组。PS:key通常为int 、string类型,value通常为数字(整数、浮点数)、string、map、结构体。(3)key是不可以重复的,如果遇到重复,后一个value会替换前一个value。原创 2024-06-12 14:33:35 · 318 阅读 · 0 评论 -
切片(slice)
【3】切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。相对的切片却是随处可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷。切片有3个字段的数据结构:一个是指向底层数组的指针,一个是切片的长度,一个是切片的容量。【1】切片定义后不可以直接使用,需要让其引用到一个数组,或者make一个空间供切片来使用。【3】方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。【1】方式1:定义一个切片,然后让切片去引用一个已经创建好的数组。原创 2024-06-12 14:30:39 · 274 阅读 · 0 评论 -
defer关键字
比如你想关闭某个使用的资源,在使用的时候直接随手defer,因为defer有延迟执行机制(函数执行完毕再执行defer压入栈的语句),发现:遇到defer关键字,会将后面的代码语句压入栈中,也会将相关的值同时拷贝入栈中,不会随着函数后面的变化而变化。在函数中,程序员经常需要创建资源,为了在函数执行完毕后,及时的释放资源,Go的设计者提供defer关键字。所以你用完随手写了关闭,比较省心,省事。原创 2024-06-12 14:20:55 · 303 阅读 · 0 评论 -
golang闭包
(1)返回的是一个匿名函数,但是这个匿名函数引用到函数外的变量/参数 ,因此这个匿名函数就和变量/参数形成一个整体,构成闭包。(2)闭包中使用的变量/参数会一直保存在内存中,所以会一直使用---》意味着闭包不可滥用(对内存消耗大)感受:匿名函数中引用的那个变量会一直保存在内存中,可以一直使用。闭包本质依旧是一个匿名函数,只是这个函数引入外界的变量/参数。闭包就是一个函数和与其相关的引用环境组合的一个整体。匿名函数+引用的变量/参数 = 闭包。【5】不使用闭包可以吗?原创 2024-06-12 14:19:45 · 587 阅读 · 0 评论 -
go匿名函数
(2)将匿名函数赋给一个变量(该变量就是函数变量了),再通过该变量来调用匿名函数(用的少)【3】如何让一个匿名函数,可以在整个程序中有效呢?将匿名函数给一个全局变量就可以了。【1】Go支持匿名函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数。(1)在定义匿名函数时就直接调用,这种方式匿名函数只能调用一次(用的多)原创 2024-06-12 14:18:00 · 572 阅读 · 0 评论 -
init函数
每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用。【1】init函数:初始化函数,可以用来进行一些初始化的操作。【2】全局变量定义,init函数,main函数的执行流程?原创 2024-06-12 14:16:07 · 217 阅读 · 0 评论 -
golang函数
对特定的功能进行提取,形成一个代码片段,这个代码片段就是我们所说的函数。【3】函数和函数是并列的关系,所以我们定义的函数不能写到main函数中。遵循标识符命名规范:见名知意 addNum,驼峰命名addNum。首字母大写该函数可以被本包文件和其它包文件使用(类似public)形参列表:个数:可以是一个参数,可以是n个参数,可以是0个参数。func 函数名(形参列表)(返回值类型列表){【2】函数的作用:提高代码的复用性。形式参数列表:作用:接收外来的数据。实际参数:实际传入的数据。原创 2024-06-12 14:12:34 · 437 阅读 · 0 评论 -
循环for、for rang
【代码】循环for、for rang。原创 2024-06-12 14:07:35 · 171 阅读 · 0 评论 -
golang简介
腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice。一般的选择,都是选择用于自己公司合适的产品系统来做,比如消息推送的、监控的、容器的等,Golang特别适合做网络并发的服务,这是他的强项,所以也是被优先用于这些项目。和蓝鲸平台,容器开发有关。原创 2024-06-12 13:59:36 · 954 阅读 · 0 评论 -
go错误处理
【代码】异常处理defer+recover()原创 2024-06-12 13:42:39 · 137 阅读 · 0 评论 -
封装引用私有变量
【代码】封装引用私有变量。原创 2024-06-12 13:40:48 · 132 阅读 · 0 评论 -
go的面向对象继承
【代码】go的面向对象继承。原创 2024-06-12 13:37:33 · 124 阅读 · 0 评论 -
go interface
【代码】go interface。原创 2024-06-12 13:32:22 · 231 阅读 · 0 评论