
golang
文章平均质量分 86
学习go语言
两片空白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
go——Swagger使用
Swagger是一个用于设计,构建和文档化API的开源框架。在Go语言中,Swagger可以帮助后端开发人员快速创建和定义RESTful API,并提供,这些文档包含了API的详细信息以及如何使用他们的说明。RESTful是一个网络应用程序的设计风格,基于HTTP协议。使用XML或JSON格式定义统一标准接口。强调资源,统一接口,URL和无状态的设计风格。不是标准也不是协议,只是一种风格。原创 2024-07-04 20:53:07 · 3316 阅读 · 0 评论 -
Go语言结构体内嵌接口
不依赖具体实现:即接口为A,结构体B1、B2实现了接口A,结构体C内嵌了A,那么C.A可以通过B1/B2实例化;对接口类型进行重写:当C.A通过B1实例化后,C和B1的关系,可以转变为结构体C内嵌结构体B1,那么C可以直接使用B1中的所有方法,当然C也可以对B1中的方法进行重写,这里官方文档这样解释“Interface and we can override a specific method without having to define all the others.”原创 2024-06-11 21:17:39 · 807 阅读 · 0 评论 -
Golang——reflect(反射)
反射是指在对程序本身进行访问和修改的能力。原创 2024-05-18 10:50:47 · 1170 阅读 · 0 评论 -
Golang——数据格式
MSGPack是二进制的json,性能更快,更省空间。示例:结构体生成json。原创 2024-05-16 17:13:00 · 434 阅读 · 0 评论 -
Golang——Context
在Go http包的Server中,每一个请求在都有一个对应的goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务。比如数据库和RPC服务。用来处理一个请求的goroutine通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息,验证相关的token,请求的截止时间。当一个请求被取消或超时时,所有用来处理请求的goroutine都应该迅速退出,然后系统才能释放这些goroutine占用的资源。原创 2024-05-16 14:12:56 · 1086 阅读 · 0 评论 -
Golang——http包
/ Transport指定执行独立、单次HTTP请求的机制。// 如果Transport为nil,则使用DefaultTransport。// CheckRedirect指定处理重定向的策略。// 如果CheckRedirect不为nil,客户端会在执行重定向之前调用本函数字段。// 参数req和via是将要执行的请求和已经执行的请求(切片,越新的请求越靠后)。// 如果CheckRedirect返回一个错误,本类型的Get方法不会发送请求req,// 而是返回之前得到的最后一个回复和该错误。原创 2024-05-11 18:01:54 · 1443 阅读 · 0 评论 -
Golang——Strconv包
strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数:Atoi(),Itoa(),parse系列函数,format系列函数,append系列函数。原创 2024-05-09 20:32:53 · 1462 阅读 · 1 评论 -
Golang——IO操作
根据提供的文件名创建新的文件,返回一个文件对象,默认权限0666,任何人可读可写,不可执行,如果文件存在,则会截断它(为空文件),如果成功,返回的文件对象可用于I/O;在指定位置(相对于文件起始位置),写入byte类型的数据到文件,它返回写入的字节数和可能遇到的任何错误。文件读取可以用file.Read()和file.ReadAt(),读到文件末尾会返回io.EOF的错误。打开一个名为name的文件,flag是打开方式,只读或只写,不存在创建等,perm文件权限。向文件中写入string类型的信息到文件。原创 2024-05-08 17:40:05 · 1124 阅读 · 0 评论 -
Go标准库——Flag库和Log库
有以下两种常见的定义命令行flag参数的方法。基本格式如下:flag.Type(flag名,默认值,帮助信息) *Type。name := flag.String("name", "张三", "姓名")age := flag.Int("age", 25, "年龄")married := flag.Bool("married", false, "婚否")delay := flag.Duration("d", 0, "时间间隔")原创 2024-05-07 10:12:17 · 1222 阅读 · 0 评论 -
Go常用的标准库——fmt,time
fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。原创 2024-04-29 20:56:46 · 1448 阅读 · 0 评论 -
Golang操作Redis
Redis是完全开源免费的,遵循BSD协议,是一个高性能的key-value数据库。原创 2024-04-26 20:43:31 · 2294 阅读 · 0 评论 -
go操作Mysql
使用第三方开源mysql库:githubcomgosqldrivermysqlgithubcomjmoironsqlx(基于mysql驱动的封装)命令行输入:go getgithubcomgosqldrivermysqlcomjmoironsqlxgo get 时的问题:需要保证go环境变量GO111MODULE=on需要生成go mod文件 在src文件夹下创建一个文件(如:sample-app),使用go mod init sample-app。原创 2024-04-26 14:29:01 · 1756 阅读 · 0 评论 -
Golang特殊init函数
init()函数是一个特殊的函数,存在一下特性以下是<<the way to go>>的解释:变量除了可以在全局声明中初始化,也可以在 init ()函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。每个源文件都只能包含一个 init() 函数(此处存在错误)。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。原创 2024-04-25 15:38:28 · 346 阅读 · 0 评论 -
Golang——GMP原理与调度
我们知道,一切软件都跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每一个程序就是一个进程,直到一个程序运行完,才能进行下一个进程,就是"单进程时代"。一切程序只能串行发生。那么能不能有有个进程来宏观一起来执行多个任务呢?后来操作系统就具有了最早的并发能力:多进程并发,当一个进程阻塞时,切换到另外一个等待执行的进程,这样就能尽量把CPU利用起来,CPU就不浪费了。原创 2024-04-25 13:15:01 · 2432 阅读 · 0 评论 -
Go并发安全,锁和原子操作
有时候在Go代码中可能存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。原创 2024-04-22 10:11:01 · 1132 阅读 · 0 评论 -
Goroutine池,定时器,select
下面来一个例子:需求随机生成数字,计算一个数字的各个位数之和。例如数字123,结果为1 + 2 + 3 = 6。原创 2024-04-16 09:44:30 · 523 阅读 · 0 评论 -
Go——Channel通道
channel常见的异常总结:注意:关闭已经关闭的channel也会产生panic。原创 2024-04-13 14:32:56 · 1377 阅读 · 1 评论 -
Go——Goroutine介绍
在java/c++中我们要实现一个并发编程,我们通常需要自己维护一个线程池,并且需要自己取包装一个有一个任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量心智。那么能不能有一种机制,程序员只需要定义很多任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但goroutine是由Go的运行时(runtime)调度和管理的。原创 2024-04-12 16:37:21 · 1474 阅读 · 2 评论 -
Go——网络编程
在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议簇隐藏在Socket后面,对用户来说只需要调用Socket规定的相关函数,让Socket去组织符合指定的协议数据然后进行通信。UDP协议中文名称是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据的发送和接收,数据不可靠的,没有时序的通信,但是UDP协议的实时性比较好(快),通常用于视频直播相关领域。创建套接字,绑定套接字,监听套接字,监听到连接后,获取到监听套接字,然后往监听套接字中收发数据。原创 2024-04-11 10:21:36 · 1167 阅读 · 1 评论 -
Go——面向对象
Go语言提倡面向接口编程。接口在底层实现上包含两部分,即类型(type)和数据(data)。接口是一个或多个方法签名的集合任何类型的方法集中只要拥有该接口对应的全部方法,就表示它实现了该接口,无须在该类型上显示声明实现了那个接口。这称为Structural Typing。所谓对应方法,是指有相同名称,参数列表(不包括参数名)以及返回值。当然,该类型还可以有其它方法。接口只有方法声明,没有实现,没有数据字段(属性)。接口可以匿名嵌入其它接口,或者嵌入到其它结构中。原创 2024-04-09 14:10:57 · 1177 阅读 · 0 评论 -
Golang——方法
func (reveicer type) methodName(参数列表)(返回值列表){}//参数和返回值可以省略// 接收者为值类型,无参,无返回值// 接收者为值类型,单参,无返回值// 接收者为值类型,无参,单返回值// 接收者为值类型,多参,无返回值// 接收者为值类型,无参,多返回值// 接收者为值类型,多参,多返回值// 接收者为指针类型,无参,无返回值// 接收者为指针类型,单参,无返回值// 接收者为指针类型,无参,单返回值// 接收者为指针类型,多参,无返回值。原创 2024-04-08 16:13:21 · 1531 阅读 · 1 评论 -
Golang单元测试和压力测试
go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程类似,并不需要学习新的语法,规则和工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终可执行文件中。在*_test.go文件中有三种类型的函数,单元测试函数,基准测试函数和示例函数。原创 2024-04-07 19:57:32 · 2359 阅读 · 2 评论 -
Go——函数
在参数赋值时,可以不用一个个的赋值,可以直接传递一个切片。注意传递切片时在可变参数后需要加"..."。原创 2024-04-03 15:36:43 · 1172 阅读 · 0 评论 -
Go——结构体
在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔型等数据结构,Go中可以使用type关键字来自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型来定义,也可以通过struct来定义。例如:通过type关键字定义,MyInt就是一种新的类型,它具有int的特性。自定义类和类型别名表面上看只有一个等号的差异,实际上自定义类型是新增了一个类型,而类型别名并没有新增类型。下面的例子表明:a的类型为main.NewInt,表示在main包下定义的NewInt类型。原创 2024-03-27 17:30:33 · 1149 阅读 · 1 评论 -
Go——map操作及原理
KeyType表示键类型ValueType表示值类型map类型的变量默认初始值为nil,需要使用make函数来分配内存。map[KeyType]ValueType{} //底层也是使用的makemap[KeyType]Value{ //底层也是使用的makekey:value,key:value,...其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。可以使用len()内置函数来获取map键值对的个数。原创 2024-03-21 17:36:11 · 1669 阅读 · 0 评论 -
Go——指针和内存逃逸
Go语言的逃逸分析是指:Go编译器用来决定变量存储位置的过程。逃逸分析在编译阶段完成逃逸分析目的是决定内分配地址是栈还是堆栈上分配内存比在堆中分配内存有更高的效率栈上分配的内存不需要GC处理,堆上分配的内存使用完毕会交给GC处理在实际中,应该尽量避免逃逸。栈中的变量不需要gc回收。同时栈的分配比堆快,性能好。另外,还可以进行同步消除,如果定义的对象的方法上有同步锁,但在运行时却只有一个线程在访问,此时逃逸分析后的机器码会去掉同步锁运行。原创 2024-03-20 20:19:39 · 1426 阅读 · 0 评论 -
Go——切片
slice并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。原创 2024-03-19 13:53:39 · 1220 阅读 · 0 评论 -
Go——数组
Golang Array和以往认知的数组有很大的。原创 2024-03-13 10:27:50 · 653 阅读 · 0 评论 -
Go——下划线
"_"是特殊标识符,用来忽略结果。原创 2024-03-12 17:42:06 · 664 阅读 · 0 评论 -
Go——运算符,变量和常量,基本类型
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的值。常量的声明和变量声明非常相似,只是把var换成const,常量在定义的时候必须赋值。声明了pi和e这两个变量之后,在整个程序运行期间它们的值都不能再发生变化了。const (e = 2.7182const同时声明多个常量时,如果省略了值则表示和上一行的值相同。//n1,n2,n3的值都是100const (n1 = 100n2n3Golang更明确的数字类型命名,支持Unicode,支持常用数据结构。原创 2024-03-12 17:41:19 · 1375 阅读 · 1 评论 -
Golang命令
【代码】Golang命令。原创 2024-03-12 09:24:34 · 378 阅读 · 0 评论 -
Go语言内置类型和函数
go语言拥有一些不需要进行导入操作就可以使用的内置函数。他们有时可以针对不同类型进行操作,例如len,cap和append,或必须用于系统级的操作,例如:panic。因此,他们需要直接获得编译器的支持。原创 2024-03-11 15:56:35 · 1360 阅读 · 1 评论 -
Go语言简介
其下创建src,pkg,bin目录,bin目录用于生成可执行文件,pkg目录用于生成.a文件,golang中的import name,实际就是到GAPATH中去寻找name.a,使用时是该name.a源码中声明的package名字。Go程序是保存在多个.go文件中,文件的第一行就是package xxx声明,用来说明该文件属于哪一个包(package),package声明下来就是import声明,再下来是类型,变量,常量,函数的声明。1. 声明在函数内部,是函数的本底值,类似private。原创 2024-03-11 13:27:38 · 867 阅读 · 0 评论 -
Go的安装
根据不同系统下载不同的包。原创 2024-03-07 20:59:08 · 2202 阅读 · 0 评论 -
如何生成go mod文件实现多文件编写
一个包要引用另外一个包的函数或者要使用第三方库的函数。此时需要使用到go mod。首先go mod文件必须生成在独立的文件中,不能嵌套在文件夹中。在终端进入到src文件夹中,输入go mod init,此时,会提示需要输入module的其实值,并且会给出两个例子。在终端输入:go mod init xxx //(xxx是模块起始值)之后输入:go mod tidy...原创 2022-04-25 19:46:18 · 1753 阅读 · 0 评论 -
go语言并发同步 select
目录前言使用前言当协程通过多条管道来进行数据通信时,接收端当没有接收到数据,会一直等待。导致后面的管道即使有数据也收不到。如下,当c1没有数据时,会一直再那等待,即使c2有数据也接收不到。package mainfunc main() { var c1, c2 chan int n1 := <-c1 n2 := <-c2}这样效率会很低,select可以实现当那个管道数据先来,可以先被接收到。使用1. 简单使用package .原创 2022-04-23 18:11:36 · 657 阅读 · 0 评论 -
go语言管道(channel)
前言channel式go语言协程中数据通信的双向通道。但是在实际应用中,为了代码的简单和易懂,一般使用的channel是单向的。使用1. channel的定义和收发数据package channelfunc main(){ //var c chan int c的默认值位nil,一般不使用 c := make(chan int) c <- 1 //发数据 n := <-c //收数据 }但是上面收发数据的写法是错误的,因为一个协程往管...原创 2022-04-17 23:40:39 · 4333 阅读 · 1 评论 -
GO语言goroutine
前言go语言对于并发编程有原生的支持。如下代码:创建10个协程并发执行。package mainimport ( "fmt" "time")func main() { for i := 0; i < 10; i++ { go func(i int) { fmt.Printf("hello from goroutine %d\n", i) }(i) } //main函数执行完,协程也会被终止,等待1秒,协程执行完 ti...原创 2022-04-17 11:57:49 · 777 阅读 · 0 评论