![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 73
go并发编程、网络编程
勤天
一直在路上,路上的风景很精彩!
展开
-
gorm 操作mysql
目录一、gorm介绍二、gorm安装三、gorm模型定义1、ORM介绍2、gorm模型定义3、gorm模型标签4、定义表名5、gorm.Model6、自动更新时间四、gorm连接数据库1、配置DSN (Data Source Name)2、使用gorm.Open连接数据库3、gorm调试模式4、gorm连接池一、gorm介绍GORM是Golang目前比较热门的数据库ORM操作库,对开发者也比较友好,使用非常方便简单,使用上主要就是把原创 2022-04-21 16:59:37 · 7771 阅读 · 3 评论 -
go操作mysql
目录一、使用包database/sql1、DB(数据库对象)2、Results 和 Result(结果集)3、Statements(语句)二、增删改 Exec()方法三、Query() 方法使用四、Get() 方法使用五、Select() 方法使用六、连接池1、连接池说明2、连接池配置3、数据库连接重试次数一、使用包database/sqldatabase/sql 是 Go 操作数据库的标准库之一,它提供了一系列接口方法,用于访问数据库(mys原创 2022-04-21 16:49:31 · 9741 阅读 · 0 评论 -
go解析命令行参数 flag包
目录一、获取命令行参数二、flag包基本使用1、flag参数类型2、定义命令行flag参数3、flag其他函数4、flag包完整示例Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。一、获取命令行参数os.Args:如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//os.Args原创 2022-04-20 13:42:27 · 412 阅读 · 0 评论 -
go开发工具包 com
目录一、安装二、具体使用1、url2、path3、string4.time5.slice6.regexp7.file8.dir9.convert转换10.commad源码地址:https://github.com/Unknwon/com比较小巧实用,很多比较常用的功能,不用重复造轮子了,直接拿来就用,方便一、安装go get -u github.com/Unkown/com二、具体使用1、urlfunc Url.原创 2022-04-20 12:00:15 · 557 阅读 · 0 评论 -
go struct标签详解
目录一、结构体标签介绍二、json标签三、gorm标签四、form标签五、binding标签六、ini标签一、结构体标签介绍结构体的字段除了名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。结构体标签由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。键值对之间使用一个空格分隔`key1:"valu原创 2022-04-15 16:26:54 · 3842 阅读 · 2 评论 -
go结构体嵌套
一个结构体中可以嵌套包含另一个结构体或结构体指针。//Address 地址结构体type Address struct { Province string City string}//User 用户结构体type User struct { Name string Gender string Address Address}func main() { //直接实例化该嵌套结构体 user1 := User原创 2022-04-15 16:20:48 · 4282 阅读 · 0 评论 -
go中Struct 结构体详解
目录一、结构体定义1、结构体的定义2、结构体字段的可见性3、结构体的匿名字段二、结构体实例化1、基本实例化2、针类型实例化3、取地址实例化三、结构体初始化1、两种初始化的方式2、使用“键值对",值列表两种初始化四、使用结构体实现构造函数五、结构体的“继承”一、结构体定义Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供...原创 2022-04-15 16:19:13 · 6679 阅读 · 0 评论 -
go函数延迟调用defer
目录一、defer执行顺序二、延迟执行顺序1、使用延迟并发解锁2、使用延迟释放文件句柄在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。不是defer的语句还是按照之前的执行顺序,顺序执行一、defer执行顺序package mainimport ( "fmt")func main() { fmt.Println...转载 2022-04-15 16:10:42 · 145 阅读 · 0 评论 -
go中宕机与恢复 panic/recover 介绍
目录一、panic 宕机二、recover恢复三、panic和recover的关系Go 语言可以在程序中手动触发宕机,让程序崩溃,这样开发者可以及时地发现错误,同时减少可能的损失。Go 语言程序在宕机时,会将堆栈和 goroutine 信息输出到控制台,所以宕机也可以方便地知晓发生错误的位置.一、panic 宕机func panic(v interface{})panic() 的参数可以是任意类型,后文将提到的 recove...原创 2022-04-14 15:57:09 · 864 阅读 · 0 评论 -
go指针就是这么简单
目录一、Go语言中的指针二、指针类型、指针地址三、指针取值四、空指针五、new和make1、new2、make3、new与make的区别区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针类型、指针取值、指针地址。一、Go语言中的指针Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝...原创 2022-04-14 15:51:46 · 250 阅读 · 0 评论 -
阻塞死锁详解
目录一、通道阻塞/死锁示例二、死锁解决办法1、方法一:先消费channel2、方法二:用缓冲通道三、信道数据的进出顺序1、无缓冲信道2、缓冲信道四、等待多gorountine的方案一、通道阻塞/死锁示例死锁:所有的线程或进程都在等待资源的释放1)死锁示例一func main() { ch := make(chan int) <- ch // 阻塞main goroutine, 信道ch被锁}//执行这个程序你会看到Go原创 2022-04-13 14:46:11 · 397 阅读 · 0 评论 -
select 多路复用
目录一、循环接收多个信道的问题二、select详解一、循环接收多个信道的问题在使用通道时,想同时接收多个通道的数据是一件困难的事情。通道在接收数据时,如果没有数据可以接收将会发生阻塞。虽然可以使用如下模式进行遍历,但运行性能会非常差。for{ // 尝试接收ch1通道 data, ok := <-ch1 // 尝试接收ch2通道 data, ok := <-ch2 // 接收后续通道 …}二、sele原创 2022-04-13 14:39:45 · 1217 阅读 · 0 评论 -
Channel 通道详解
目录一、通道介绍1、声明通道2、创建通道二、channel操作1、发送2、接收3、关闭三、无缓冲通道四、有缓冲的通道五、循环读取信道六、关闭通道七、单向通道一、通道介绍单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的 goroutine 中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。原创 2022-04-12 09:45:06 · 74757 阅读 · 0 评论 -
goroutine详解
目录一、创建 goroutine1、启动单个协程2、使用goroutine的问题3、启动多个goroutine二、使用匿名函数创建goroutine一、创建 goroutineGo 程序中使用go关键字为一个函数创建一个 goroutine。一个函数可以被创建多个 goroutine,一个 goroutine 必定对应一个函数。go 函数名( 参数列表 )使用 go 关键字创建 goroutine 时,被调用函数的返回值会...原创 2022-04-12 09:35:36 · 509 阅读 · 0 评论 -
并发和并行介绍
目录一、进程和线程二、并发和并行三、协程和线程四、并发不是并行一、进程和线程1)进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 2)线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 3)一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。二、并发和并行A. 多线程程序在一个核的cpu上运行,就是并发。 B. 多线程程序在多个核的cpu上运行,就是并行。并发原创 2022-04-11 11:18:04 · 235 阅读 · 0 评论 -
“The selected directory is not a valid home for Go Sdk“
在配置 goland GOROOT SDK 的过程中,一直报错如下:"The selected directory is not a valid home for Go Sdk"查看go版本D:\go-codes> go versiongo version go1.17.3 windows/amd64解决:1. 在 golang 安装路径下寻找:'go1.17.2\src\runtime\internal\sys\zversion.go' 文件2. 打...原创 2022-04-11 11:03:02 · 3072 阅读 · 2 评论 -
GOPATH 详解
目录一、重要的几个环境变量二、GOPATH设置1、使用命令行查看GOPATH信息2、linux下使用GOPATH的工程结构3、windows下设置GOPATH4、在多项目工程中使用GOPATH三、配置完GOPATH后的工作目录1、适合个人开发者2、目前流行的项目结构3、适合企业开发者一、重要的几个环境变量$GOROOT表示 Go 的安装目录,它的值一般都是$HOME/go,当然,你也可以安装在别的地方。 $GOARCH表示目标机器(目标机器是指...原创 2022-04-11 11:00:50 · 13774 阅读 · 2 评论 -
go 格式化占位符详解
目录1、通用占位符(打印不同类型)2、布尔型3、整型4、浮点数与复数5、字符串和[]byte6、指针7、宽度标识符8、其他falgfmt包的*printf系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。1、通用占位符(打印不同类型) 占位符 说明 %v 值的默认格式表示 %+v 类...原创 2022-04-06 14:06:20 · 3371 阅读 · 0 评论 -
go基准测试,获得代码内存占用和运行效率的性能数据
目录一、基准测试基本使用二、基准测试原理三、自定义测试时间四、测试内存五、控制计时器基准测试可以测试一段程序的运行性能及耗费 CPU 的程度。Go 语言中提供了基准测试框架,使用方法类似于单元测试,使用者无须准备高精度的计时器和各种分析工具,基准测试本身即可以打印出非常标准的测试报告。一、基准测试基本使用package mainimport "testing"func Benchmark_Add(b *testing.B) { va...原创 2022-04-06 13:40:11 · 1888 阅读 · 0 评论 -
go单元测试
目录一、go单元测试介绍二、单元测试使用1、单元测试命令2、运行指定单元测试用例3、标记单元测试结果4、单元测试日志一、go单元测试介绍单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是...原创 2022-04-06 10:07:22 · 3289 阅读 · 0 评论