go基础
我只要一发
for(i :=1;i > 0;i++){我真的帅}
展开
-
go语言gin框架cookie和session
CookieCookie的由来HTTP协议是无状态的,这就存在一个问题。无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样一个场景下诞生。Co原创 2021-03-23 10:03:16 · 2474 阅读 · 1 评论 -
go语言之Linux上安装Docker
第一步:卸载旧版本docker的旧版本被称为Docker、docker.io或docker-engine。如果安装了这些,请卸载它们:sudo apt-get remove docker docker-engine docker.io containerd runc第二步:设置存储库更新apt软件包索引并安装软件包,以允许apt使用HTTPS的存储库:sudo apt-get update sudo apt-get install \ apt-transport-https \原创 2021-03-22 12:55:55 · 325 阅读 · 0 评论 -
go语言MySQL的SQL预处理,sql注入,go语言操作mysql数据库事务
什么是预处理?普通SQL语句执行过程:客户端对SQL语句进行占位符替换得到完整的SQL语句。客户端发送完整SQL语句到MySQL服务端MySQL服务端执行完整的SQL语句并将结果返回给客户端。预处理执行过程:把SQL语句分成两部分,命令部分与数据部分。先把命令部分发送给MySQL服务端,MySQL服务端进行SQL预处理。然后把数据部分发送给MySQL服务端,MySQL服务端对SQL语句进行占位符替换。MySQL服务端执行完整的SQL语句并将结果返回给客户端。为什么要预处理?优化MySQ原创 2021-03-20 16:04:43 · 977 阅读 · 0 评论 -
go语言操作MySQL
下载依赖go get -u github.com/go-sql-driver/mysql使用MySQL驱动func Open(driverName, dataSourceName string) (*DB, error)Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的信息。package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-dr原创 2021-03-20 14:55:52 · 288 阅读 · 1 评论 -
go基础之网络编程
TCP协议TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。TCP服务端一个TCP服务端可以同时连接很多个客户端,例如世界各地的用户使用自己电脑上的浏览器访问淘宝网。因为Go语言中创建多个goroutine实现并发非常方便和高效,所以我们可以每建立一次链接就创原创 2021-03-20 10:43:02 · 208 阅读 · 0 评论 -
go基础之sync.Once,sync.Map
在前面的话:这是一个进阶知识点。在编程的很多场景下我们需要确保某些操作在高并发的场景下只执行一次,例如只加载一次配置文件、只关闭一次通道等。Go语言中的sync包中提供了一个针对只执行一次场景的解决方案–sync.Once。sync.Once只有一个Do方法,其签名如下:func (o *Once) Do(f func()) {}备注:如果要执行的函数f需要传递参数就需要搭配闭包来使用。加载配置文件示例延迟一个开销很大的初始化操作到真正用到它的时候再执行是一个很好的实践。因为预先初始化一个变原创 2021-03-20 08:40:38 · 281 阅读 · 0 评论 -
go基础并发安全和锁
有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生静态文体(数据静态)。类比现实生活中的例子,有十字路口被个个方向的车竞争;有火车上的卫生间被车厢上的人竞争例子:package mainimport ( "fmt" "sync")var wy sync.WaitGroupvar x intfunc add() { for i := 0; i < 50000; i++ { x += 1 } wy.Done()}func原创 2021-03-19 19:19:40 · 210 阅读 · 0 评论 -
go语言基础之并发编程,channel
channel单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接原创 2021-03-19 14:27:48 · 165 阅读 · 0 评论 -
go基础之并发编程,goroutine
goroutine在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 gorouti原创 2021-03-19 11:52:50 · 170 阅读 · 0 评论 -
go基础之strconv包的使用
strconv包实现了基本类型与字符串之间的转换Atoi()和Itoa()函数的使用package mainimport ( "fmt" "strconv")//strconv包的使用func main() { var strr string strr = "123456" //将字符串类型的整数转换为int v, err := strconv.Atoi(strr) if err != nil { fmt.Println(err) return } fmt.Pri原创 2021-03-19 09:42:18 · 302 阅读 · 0 评论 -
go基础time包的使用
package mainimport ( "fmt" "time")func main() { now := time.Now() //获得当前时间 year := now.Year() //年 month := now.Month() //月 day := now.Day() //日 hour := now.Hour() //时 minute := now.Minute() //分 second := now.Second() //秒原创 2021-03-14 20:02:37 · 152 阅读 · 0 评论 -
go基础之文件操作
package mainimport ( "bufio" "fmt" "io" "io/ioutil" "os")// read 自己实现的读文件的函数func read() { //os包中的OpenFile方法创建文件对象,返回的是一个*os.File的对象,和报错信息 fileObj, err := os.OpenFile("./main.go", os.O_APPEND, 0644) if err != nil { fmt.Println(err) return原创 2021-03-14 17:44:58 · 78 阅读 · 0 评论 -
go语言基础之接口,空接口,类型断言
接口在Go语言中的接口是一种类型,一种抽象类型,interface是一组方法(method)的集合,接口就像是定义了一个协议,一个规则,,只要一台机器有洗衣服和甩干功能我们就叫他是洗衣机,不关心属性,只关心行为接口实现的条件一个对象只要全部实现了接口中的方法,那么就实现了这个接口,换句话说,接口就是一个需要实现的方法列表接口类型变量接口类型可以存储所有实现了该接口的实例,类型与接口的关系一个类型可以同时实现多个接口,这些接口之间是独立的接口的值接口的存储分为两部分,一部分是具体类型,一部分原创 2021-03-12 18:14:01 · 156 阅读 · 0 评论 -
go语言基础之结构体
结构体Go语言中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。package mainimport "fmt"func main() { //结构体的定义 type person struct { name原创 2021-03-11 18:59:44 · 212 阅读 · 0 评论 -
go基础之函数,匿名函数,defer,panic/recover
函数函数是一个组织好的,可以重复使用的,用于执行,指定任务的代码块。Go语言支出,函数,匿名函数和闭包package mainimport ( "fmt""strings")func main() { // 定义函数的格式 // func 函数名(参数)(返回值){ // } //通过函数名就可以调用函数,函数有参数的情况下, // 必须填写参数,调用函数的结果,就是返回值 fmt.Println("fu1函数", fu1(3, 2))原创 2021-03-10 17:22:35 · 235 阅读 · 0 评论 -
go语言基础之map
Go语言中提供的映射关系容器为map,其内部使用散列表hash实现 mapmap是一种无序的基于key-value的数据结构,必须初始化才能使用package mainimport "fmt"func main() { // map的基本使用,map是引用类型,需要初始化,map可以自动扣扩容 // 初始化map,第一个参数是map的类型,第二个参数是map的容量 //容量要尽量的估算准确,不然就会在代码运行期间扩容,造成性能的下降 mapp := make(map原创 2021-03-08 15:40:20 · 177 阅读 · 0 评论 -
go语言基础之指针和new
Go语言中的指针Go语言中不存在指针操作,只需要记住两个符号&:取地址:根据地址取值取地址操作符&和根据地址取值操作符,是一对互补的操作1.对变量进行取地址操作,可以获得变量的指针2.指针变量的值是指针3.对指针变量进行取值操作,可以获得指针变量指向的原变量的值new和makeGo语言中对于引用类型的变量,我们在使用的时候需,不仅要声明,还要分配内存空间,否则我们的值没有办法存储,而对于值类型的变量就不需要分配内存,因为我们在声明的时候,已经分配好了内存,要分配内存就引出了原创 2021-03-08 14:44:12 · 495 阅读 · 0 评论 -
go语言基础之数组和切片
go语言基础之数组Array数组是同一种数据类型的集合,Go语言中,数组从声明时就确定,使用时可以修改数组成员,数组的大小不可以变化。数组是值类型,,将数组赋值给另一个变量,就相当于复制了一份,就变成了两个数组,两个数组之间的操作不冲突注意:数组支持==和!=操作,因为数组是值类型package mainimport "fmt"func main() { //数组 //存放元素的容器 //必须指定数组存放的类型和容量 //数组的长度是数组类型的一部分原创 2021-03-08 13:21:31 · 177 阅读 · 0 评论 -
go语言基础之逻辑控制
Go语言基础流程控制if流程控制是每一种语言控制逻辑走向和执行次序的重要部分,流程控制可以说是每一种语言的经脉Go语言中主要的流程控制有if和for,而switch和goto主要是为了简化代码,降低重复代码而生的结构,属于扩展类的流程控制package mainimport "fmt"func main() { //基本if语句 i := 40 if i > 18 { fmt.Println("您已经成年了") } else {原创 2021-03-07 15:03:02 · 214 阅读 · 0 评论 -
go基础之字符串操作
字符串Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型一样,go语言字符串的内部实现用utf-8编码,字符串的值为双引号””中的内容,可以在go语言的源码中直接添加非ASCII码字符字符串的转义\r 回车 \n 换行 \t 制表符 \’ 单引号 \” 双引号 \ 反斜杠多行字符串Go语言中要定一个多行字符串时,要用反引号``package mainimport "fmt"func main() { s :=原创 2021-03-02 17:58:06 · 218 阅读 · 0 评论 -
go基础之基本类型整形,浮点型,布尔型
Go语言基础之基本数据类型Go语言中有丰富的数据类型,除了基本的整形,浮点型,布尔型,字符型,还有数组,切片,结构体,函数,map,通道(channel)等基本数据类型整形整形分为两大类,按长度分为:int8,int16,int32,int64对应无符号类型:uint8,uint16,uint32,uint64,其中uint6就是我们熟知的byte,int16对应c语言中的short,int64对应c语言中的long型。特殊类型uint 32位操作系统上就是uint32,64位操作系统就是u原创 2021-03-01 17:47:03 · 270 阅读 · 0 评论 -
go常量,变量
Go基础跳过安装环节编写第一个go程序,输出”hello wolrd”package mainimport ( "fmt")func main() { fmt.Print("hello wolrd")}所有的.go文件中都有一个package关键字,用来声明文件在哪个包下main中的main函数,编译后会成为一个可执行文件,作为程序的入口import关键字用来导入包声明变量Go语言中的变量名的定义建议用小驼峰...原创 2021-02-27 19:18:48 · 127 阅读 · 0 评论