GO
文章平均质量分 63
橙虚的猿
程序员一枚;
2022年毕业;
不定时更新博客,如果大家有不懂的地方或者感兴趣的地方可以私信我, 我会尽量出教程。
帮忙给我gitee项目mynode一个star,里面包含我自己整理的笔记 项目地址:https://gitee.com/zhang_fengbo/mynode
展开
-
GORM框架增删改查
当 First、Last、Take 方法找不到记录时,GORM 会返回 ErrRecordNotFound 错误,可以通过对比gorm.ErrRecordNotFound进行判断,或者使用Find和Limit的组合进行查询。同样的道理,不带条件不能进行删除,必须加一些条件,或者使用原生 SQL,或者启用 AllowGlobalUpdate 模式。函数说明: db.Where(query interface{}, args …Group函数必须搭配Select函数一起使用。通过db.Where函数设置条件。原创 2024-02-28 11:04:38 · 364 阅读 · 0 评论 -
GORM框架快速入门
前面入门案例中,我们定义了User结构体用来和数据表users做映射,User结构体,我们称之为数据模型,在gorm框架中,操作数据库需要预先定义模型。底层都是使用的golang的database标准库,利用反射原理,执行读写操作时,将结构体翻译为sql语句,并将结果转化为对应的模型。假设有一个商品表`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID,商品Id',原创 2024-02-28 10:16:31 · 1134 阅读 · 0 评论 -
原生GO开发的博客系统
import ("time"Pid int `json:"pid"` // 文章IDTitle string `json:"title"` // 文章IDSlug string `json:"slug"` // 自定也页面 pathContent string `json:"content"` // 文章的htmlMarkdown string `json:"markdown"` // 文章的MarkdownCategoryId int `json:"categoryId"` //分类id。原创 2024-02-28 09:36:15 · 959 阅读 · 0 评论 -
Go 空切片与nil切片
在 Go 语言中,空切片和 nil 切片是两种不同的概念。原创 2024-02-20 16:59:10 · 436 阅读 · 0 评论 -
GIN框架介绍以及使用
李文周的博客原创 2024-02-20 15:55:33 · 1614 阅读 · 0 评论 -
go语言常用标准库(Time)
时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。原创 2023-09-18 14:28:28 · 315 阅读 · 0 评论 -
GO语言常用标准库 fmt
fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。原创 2023-09-11 18:06:45 · 262 阅读 · 0 评论 -
GO语言网络编程(并发编程)select
select的使用类似于switch语句,它有一系列case分支和一个默认的分支。每个case会对应一个通道的通信(接收或发送)过程。select会一直等待,直到某个case的通信操作完成时,就会执行case分支对应的语句。这种方式虽然可以实现从多个通道接收值的需求,但是运行性能会差很多。为了应对这种场景,Go内置了select关键字,可以同时响应多个通道的操作。在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。原创 2023-09-11 15:25:43 · 269 阅读 · 0 评论 -
GO语言网络编程(并发编程)并发安全和锁
有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。类比现实生活中的例子有十字路口被各个方向的的汽车竞争;还有火车上的卫生间被车厢里的人竞争。上面的代码中我们开启了两个goroutine去累加变量x的值,这两个goroutine在访问和修改x变量的时候就会存在数据竞争,导致最后的结果与期待的不符。原创 2023-09-11 15:29:05 · 245 阅读 · 0 评论 -
GO语言网络编程(并发编程)Sync
在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。sync.WaitGroup有以下几个方法:方法名 功能(wg * WaitGroup) Add(delta int) 计数器+delta(wg *WaitGroup) Done() 计数器-1(wg *WaitGroup) Wait() 阻塞直到计数器变为0sync.WaitGroup内部维护着一个计数器,计数器的值可以增加和减少。原创 2023-09-11 15:33:18 · 370 阅读 · 0 评论 -
GO语言网络编程(并发编程)原子操作(atomic包)
代码中的加锁操作因为涉及内核态的上下文切换会比较耗时、代价比较高。针对基本数据类型我们还可以使用原子操作来保证并发安全,因为原子操作是Go语言提供的方法它在用户态就可以完成,因此性能比加锁操作更好。Go语言中原子操作由内置的标准库sync/atomic提供。原创 2023-09-11 15:35:56 · 306 阅读 · 0 评论 -
GO语言网络编程(并发编程)Goroutine池
【代码】GO语言网络编程(并发编程)Goroutine池。原创 2023-09-11 15:19:48 · 435 阅读 · 0 评论 -
GO语言网络编程(并发编程)runtime包
让出CPU时间片,重新等待安排任务(大概意思就是本来计划的好好的周末出去烧烤,但是你妈让你去相亲,两种情况第一就是你相亲速度非常快,见面就黄不耽误你继续烧烤,第二种情况就是你相亲速度特别慢,见面就是你侬我侬的,耽误了烧烤,但是还馋就是耽误了烧烤你还得去烧烤)原创 2023-09-09 15:22:20 · 288 阅读 · 0 评论 -
GO语言网络编程(并发编程)GMP原理与调度
我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代”一切的程序只能串行发生。那么能不能有多个进程来宏观一起来执行多个任务呢?后来操作系统就具有了最早的并发能力:多进程并发,当一个进程阻塞的时候,切换到另外等待执行的进程,这样就能尽量把 CPU 利用起来,CPU 就不浪费了。原创 2023-09-11 17:46:40 · 190 阅读 · 0 评论 -
GO语言网络编程(并发编程)定时器
【代码】GO语言网络编程(并发编程)定时器。原创 2023-09-11 15:22:38 · 242 阅读 · 0 评论 -
GO语言网络编程(并发编程)Channel
channel常见的异常总结,如下图:注意:关闭已经关闭的channel也会引发panic。原创 2023-09-11 15:16:07 · 243 阅读 · 0 评论 -
GO语言网络编程(并发编程)并发介绍,Goroutine
并发主要由切换时间片来实现"同时"运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。每个实力4~5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是go高并发的根本原因。线程:一个线程上可以跑多个协程,协程是轻量级的线程。原创 2023-09-08 19:58:57 · 486 阅读 · 0 评论 -
Go语言网络编程(并发)Goroutine
在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。原创 2023-09-08 20:34:55 · 342 阅读 · 0 评论 -
Go语言网络编程(socket编程)WebSocket编程
WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输需要安装第三方包:cmd中:go get -u -v github.com/gorilla/websocket。原创 2023-09-08 16:37:28 · 652 阅读 · 0 评论 -
Go语言网络编程(socket编程)TCP粘包
将上面的代码保存后,分别编译。先启动服务端再启动客户端,可以看到服务端输出结果如下:收到client发来的数据: Hello, Hello. How are you?收到client发来的数据: Hello, Hello. How are you?收到client发来的数据: Hello, Hello. How are you?收到client发来的数据: Hello, Hello. How are you?收到client发来的数据: Hello, Hello. How are you。原创 2023-09-08 16:14:39 · 644 阅读 · 0 评论 -
Go语言网络编程(socket编程)http编程
客户机通过TCP/IP协议建立到服务器的TCP连接客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。原创 2023-09-08 16:33:35 · 385 阅读 · 0 评论 -
Go语言网络编程(socket编程)UDP
UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。原创 2023-09-08 15:51:46 · 642 阅读 · 0 评论 -
Go语言网络编程(socket编程)TCP
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。将上面的代码编译成client或client.exe可执行文件,先启动server端再启动client端,在client端输入任意内容回车之后就能够在server端看到client端发送的数据,从而实现TCP通信。原创 2023-09-08 15:50:14 · 1358 阅读 · 0 评论 -
Init函数和main函数
go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性。原创 2023-09-08 14:28:31 · 129 阅读 · 0 评论 -
Go语言内置类型和函数
Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。原创 2023-09-08 14:23:46 · 170 阅读 · 0 评论 -
Golang 新手经常踩的坑
Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的,新手跳过这些坑,能减少大量调试代码的时间。原创 2023-09-05 10:35:26 · 831 阅读 · 0 评论 -
LeetCode 剑指 Offer 10- I. 斐波那契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。原创 2023-09-04 12:05:29 · 319 阅读 · 0 评论 -
LeetCode 剑指offer 09.用两个栈实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )这道题很简单,主要理解栈与队列的区别,注意细节就可以。原创 2023-09-04 11:50:19 · 234 阅读 · 0 评论 -
go语言配置
在图1-1所示的页面中下载Mac OS版本的安装包go1.16.5.darwin-amd64.pkg,双击安装包进行安装,根据安装指引完成安装即可。”分隔,如图1-8所示。打开cmd终端,在终端中输入命令go version,查看是否输出Go语言安装包的版本号,如果输出正确的版本号,则证明环境变量配置成功,如图1-9所示。在“系统变量”选项组中单击“新建”按钮,在“变量”文本框中输入GOROOT,在“值”文本框中输入安装Go语言的路径,单击“确定”按钮,即系统变量配置完成,如图1-7所示。原创 2023-09-01 18:06:05 · 1229 阅读 · 0 评论