随笔分类 -  go 语言

摘要:go控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context WaitGroup这种方式是控制多个goroutine同时完成 channel 通知,根据channel阻塞的原理来进行goroutine控制 context 在go服务器中,对于每个请求的request都是在单独的 阅读全文
posted @ 2019-09-12 17:49 君子不徒语 阅读(799) 评论(0) 推荐(0)
摘要:go自带log包 封装logger 一: 封装logger二: go 切割日志文件 阅读全文
posted @ 2019-09-10 17:20 君子不徒语 阅读(911) 评论(0) 推荐(0)
摘要:我们知道go的结构体有点类的感觉,可以有自己的属性和方法。 但是由于结构体的属性都是有零值的,我们在创建结构体的时候并不需要设置这些属性的值就能创建,但是这样创建的结构体往往没有什么实用价值。 我们可以自定义一个构造方法,然后使用这个方法来构造此结构体 阅读全文
posted @ 2019-09-10 15:00 君子不徒语 阅读(246) 评论(0) 推荐(0)
摘要:select语句用于在多个发送/接收信道操作中进行选择。select语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select会随机地选取其中之一执行。该语法与switch类似,所不同的是,这里的每个case语句都是信道操作。 假设我们有一个关键性应用,需要尽快地把输出返回 阅读全文
posted @ 2019-09-10 10:51 君子不徒语 阅读(1854) 评论(0) 推荐(0)
摘要:信道产生的动机:在 Go 语言中,一个最常见的也是经常被人提及的设计模式就是不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存,信道就是为此而生 信道的声明: 方法1:var a chan int 信道的零值为nil 方法2:a :=make(chan,int) 通过信道发送接收消息: 阅读全文
posted @ 2019-09-09 17:24 君子不徒语 阅读(539) 评论(0) 推荐(0)
摘要:Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 阅读全文
posted @ 2019-09-09 15:03 君子不徒语 阅读(756) 评论(0) 推荐(0)
摘要:基本模式fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法。 Print 将参数写入字符串或io.writer scan 从字符串或 io.Reader 读取指定数据, 并输出 PrintPrint 方法的几种模式 基础模式: [name] Print 返回默认格式 阅读全文
posted @ 2019-09-09 14:04 君子不徒语 阅读(1147) 评论(0) 推荐(0)
摘要:bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销。实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行。当发起一次读写操作时,会首先尝试从缓冲区获取数据;只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲。 Reader可 阅读全文
posted @ 2019-09-05 15:52 君子不徒语 阅读(4241) 评论(0) 推荐(0)
摘要:// Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情// 并且始终成功返回。var Discard io.Writer = devNull(0) // ReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。// 如果读取成功,则 err 返回 阅读全文
posted @ 2019-09-05 14:22 君子不徒语 阅读(388) 评论(0) 推荐(0)
摘要:go 文件读写有很多方式 ioutil读文件 ioutil写文件 使用os包打开文件 将文件绑定在二进制文件中 packr 会把静态文件(例如 .txt 文件)转换为 .go 文件,接下来,.go 文件会直接嵌入到二进制文件中。packer 非常智能,在开发过程中,可以从磁盘而非二进制文件中获取静态 阅读全文
posted @ 2019-09-04 17:41 君子不徒语 阅读(8244) 评论(0) 推荐(0)
摘要:普通的get请求 带参数的get请求(参数不放在url里) get请求添加请求头 post请求 post请求的另一种方式 post请求发送json数据 说白了,我们记住http.get 和http.post就可以了 阅读全文
posted @ 2019-09-04 14:05 君子不徒语 阅读(16257) 评论(0) 推荐(2)
摘要:gorm是一个饱受好评的orm框架,此处数据库我们以mysql为例 光创建连接还不够,我们还需要model 下一步我们就开始迁移数据库 然后我们来简单说说增删改查 阅读全文
posted @ 2019-09-03 17:49 君子不徒语 阅读(964) 评论(0) 推荐(0)
摘要:数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此在Go语言中很少直接使用数组。 数组声明方式: 数组遍历: Slice Slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表sli 阅读全文
posted @ 2019-08-26 18:32 君子不徒语 阅读(238) 评论(0) 推荐(0)
摘要:Golang官方推荐的错误处理方式,是建议把err放在每个函数的返回值的最后,也就是每个函数返回至少两个值,一个是正常的结果一个是err。我们在日常的编码中也需要遵循这样的规则来定义func。 这谁能接受?如果这样的话那得话多少时间来处理异常。还好后来出现了recover,可以用它来捕获异常。 re 阅读全文
posted @ 2019-08-23 17:30 君子不徒语 阅读(198) 评论(0) 推荐(0)
摘要:个人把go函数理解分三种: 1.普通函数 普通函数声明: func name(parameter-list) (result-list) { body} 2.方法 方法就是在一个函数上,加上了一层类型限制,让这个函数变成这个类型的方法。 方法的特点:针对不同的类型可以有相同的方法名,同一个类型的方法 阅读全文
posted @ 2019-08-22 17:47 君子不徒语 阅读(178) 评论(0) 推荐(0)
摘要:go mod 最大的好处就是摆脱了GOPATH这个限制,在除了GOPATH以外的目录下也能开展你的项目 go mod使用: 1,确保你的go版本是1.1以上 2,创建一个项目目录example,并添加一个go文件 3,打开命令行,切换到该目录。 4,设置环境变量,SET GO111MODULE=on 阅读全文
posted @ 2019-08-21 14:52 君子不徒语 阅读(973) 评论(0) 推荐(0)
摘要:字符串 字符串是不可变值类型,内部⽤用指针指向 UTF-8 字节数组。默认值是空字符串 ""。用索引号访问某字节,如 s[i], i不能是负数。不能⽤用序号获取字节元素指针,&s[i] ⾮非法。不可变类型,⽆无法修改字节数组。 字符串有两种类型(区别就是是否转义) 1,解释字符串 该类字符串使用双引 阅读全文
posted @ 2019-08-21 14:25 君子不徒语 阅读(226) 评论(0) 推荐(0)
摘要:if else 结构: if val := 10; val > max { // do something } switch 结构 for 循环 for range 结构 这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 阅读全文
posted @ 2019-08-19 14:39 君子不徒语 阅读(174) 评论(0) 推荐(0)