
Golang
文章平均质量分 72
_萤火
这个作者很懒,什么都没留下…
展开
-
golang 编码指南
代码规范Go 语言实践:编写可维护的程序的建议Go code review commentsUber Go 风格指南最佳实践原创 2019-11-05 23:11:10 · 425 阅读 · 0 评论 -
golang 基础知识
GO 命令go build只对main包下的文件有效在当前目录下生成可执行文件使用 -o 参数显式指定路径和文件名默认作用范围为当前文件夹,编译单个文件需指定文件名go install编译和安装文件main包文件安装到bin文件夹(.exe)普通包文件安装到pkg/$GOOS文件夹(.a)go run编译和执行程序,不生成文件go get......原创 2019-04-05 22:58:46 · 1051 阅读 · 0 评论 -
golang 内置命令
命令列表 build compile packages and dependencies clean remove object files doc show documentation for package or symbol env print Go environment information bug st...原创 2020-02-28 21:51:10 · 632 阅读 · 0 评论 -
golang 包管理
import// 相对路径导入 该文件同一目录的model模块import "./model"// 绝对路径导入 $GOPATH/pkg/$GOOS/url/modelimport "url/model"import ( f "fmt" . "http" _ “sql" // 只想使用包中的init函数)vendor# 安装govendorgo get -u -v gi...原创 2019-09-30 06:54:36 · 858 阅读 · 0 评论 -
golang 测试
go test命令测试该目录下的所有测试文件-v获得详细信息-cover获得测试覆盖率测试文件需要以_test.go结尾测试函数写法import "testing"func TestXxx(t *testing.T) { ...}跳过部分测试 -go test -short跳过某些测试用例func TestWantToSkip(t *testing.T) ...原创 2019-04-27 18:30:26 · 531 阅读 · 0 评论 -
golang 性能分析(pprof)
性能分析从业务目标角度,通常我们的瓶颈出现在业务的通量和时延两个问题上比如一个MySQL数据库,你从其他机器上对它发请求,每秒它能处理10万个请求,这个就是通量性能;每个请求的反应时间是0.5ms,这个就是时延性能通量和时延是相互相承的两个量,当通量达到系统上限,时延就会大幅提高一般而言,性能分析主要关注 CPU、内存、磁盘 IO、网络这些指标runtime/pprof适用...原创 2020-02-29 19:03:25 · 5472 阅读 · 0 评论 -
golang goroutine
Goroutine(协程)在函数前加上go关键词即可协程由线程组成,在每个线程上进行多路复用因此比线程更高效和轻量当一个协程被阻塞时,所在的线程也被阻塞,而go的runtime会把该线程上的其他协程移动到未阻塞的线程协程不保证执行顺序通过设置runtime.GOMAXPROCS(n) ,Go的goroutine可以实现并行默认值为CPU核数runtime.GOMAXPRO...原创 2019-05-03 10:53:34 · 541 阅读 · 0 评论 -
golang channel和select
Channel从根本上来说,channel只是一个数据结构,可以被写入数据,也可以被读取数据所谓的发送数据到channel,或者从channel读取数据,说白了就是对一个数据结构的操作因为协程原则上不会出现多线程编程中经常遇到的资源竞争问题,所以这个channel的数据结构甚至在访问的时候都不用加锁因为Go语言支持多CPU核心并发执行多个goroutine,会造成资源竞争,所以在必要的位置还是需要加锁的通道可以传输 int, string, 结构体,甚至是函数通道传递是原创 2020-06-10 08:11:43 · 10921 阅读 · 1 评论 -
golang sync模块
锁重复加锁会引发死锁,重复解锁会引发panicsync.Mutex作为参数时的时候需要传指针,不然就是拷贝,会引起加锁失败条件变量条件变量并不是被用来保护临界区和共享资源的,它是用于控制想要访问共享资源线程的顺序当共享资源的状态发生变化时,它可以被用来通知被互斥锁阻塞的线程条件变量是基于互斥锁或读写锁的,必须有他们的支持才能够起作用原子操作执行速度要比其他的同步工具快得多,通常会高出好几个数量级但由于原子操作函数只支持非常有限的数据类型,所以在很多应用场景下,互斥锁往往是更原创 2020-06-10 08:13:59 · 495 阅读 · 0 评论 -
golang context模块
为什么需要contextcontext可以主要用来在goroutine中传递上下文信息包括取消信号,超时时间,截止时间,k-v等利用context关闭树状goroutine链当go服务处理一个请求时,可以需要开多个goroutine,形成goroutine链例如一个区数据库拿数据,一个调用下游接口等等如果这个请求被取消了(例如刷新了浏览器或者超时了),那么下游gorou...原创 2019-11-09 00:45:10 · 381 阅读 · 0 评论 -
golang 面向对象
接口变量的底层实现接口的值是一个两个字长度的数据结构第一个字包含一个指向内部表结构的指针,这个内部表里存储的有实体类型的信息以及相关联的方法集第二个字包含的是一个指向存储的实体类型值的指针所以接口的值结构其实是两个指针通过接口可以实现泛型和多态空接口可以被任意类型实现type empty interface{}类型断言// 判断某一接口变量否是某一类型/...原创 2019-10-24 22:59:04 · 490 阅读 · 0 评论 -
golang web编程
net/http包ServeMux在解析URL时,如果URL不是以/结尾,则需要精确匹配才会调用对应的handler如果存在/ 和 /hello两个处理器对应的URL,当我们传入/hello/there时,调用的是/ 处理器把/hello 改为 /hello/ 则调用/hello/ 处理器http.Request// r是 *http.Request 类型// 得到的是字符...原创 2019-09-29 08:41:27 · 454 阅读 · 0 评论 -
golang 数据库
database/sql包golang封装了database/sql标准库,它提供了用于处理sql相关的操作的接口。而接口的实现则交给了数据库驱动写代码逻辑的时候,不用考虑后端的具体数据库,即使迁移数据库类型的时候,也只需要迁移相应的驱动即可,而不用修改代码使用数据库时,除了database/sql包本身,还需要引入想使用的特定数据库驱sql.Open()不建立与数据库的任何连...原创 2020-01-12 15:29:45 · 1332 阅读 · 0 评论 -
golang 错误与异常处理
自定义错误值应该统一分组定义,而不是零散的分布在各个角落然后返回时直接返回这些值// file error objectvar ( ErrEof = errors.New("EOF") ErrClosedPipe = errors.New("io: read/write on closed pipe"))// port error objectva...原创 2019-09-29 08:42:51 · 585 阅读 · 0 评论 -
golang 字符串处理
// 字符串->byte切片c := []byte(str)// 字符串排序s := “14325”c := strings.Splite(s, "")sort.Strings(c)s = strings.Join(c, "")字符串的连接// 最慢s := s1 + s2strings包包含常用字符串函数strings.HasPrefix(s, sub)...原创 2019-10-24 22:56:33 · 529 阅读 · 0 评论 -
golang 输入输出和文件操作
io.Readertype Reader interface { Read(p []byte) (n int, err error)}任何实现了Read方法的类型都实现了io.Reader接口可以从Reader接口中读取数据到p中当成功读取n > 0 字节后,如果遇到错误或者文件结尾会返回错误所以当n > 0时,应该先处理读到的数据,这些数据是有效的i...原创 2019-10-26 00:20:05 · 1119 阅读 · 0 评论 -
golang 内存管理
对象池在每次开始执行垃圾回收时,都会清除所有已创建的临时对象池中的值内存暴涨原创 2020-06-10 08:15:19 · 612 阅读 · 0 评论 -
golang 日志
log库利用全局变量std来调用标准日志命令可以根据需要创建自己的日志变量通过New函数//log.go in package log// 日志变量类型// 互斥锁保证多个goroutine的线程安全type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following...原创 2019-10-26 11:49:20 · 259 阅读 · 0 评论 -
golang json处理
解析JSONfunc Unmarshal(data []byte, v interface{}) errorv一般是一个指针能够被赋值的字段必须是可导出字段(即首字母大写)当你接收到一个很大的JSON数据结构而你却只想获取其中的部分数据的时候,你只需将你想要的数据对应的字段名大写如果不知道JSON数据的结构,可以先解析到空接口中,然后利用断言解析生成JSONfun...原创 2019-10-25 19:55:19 · 375 阅读 · 0 评论 -
golang time模块
获取当前时间time.Now() // time类型// now默认获取的是当地时间// UTC得到的是格林威治时间time.Now().UTC()time类型2018-11-21 11:50:39.540473 +0800 CST m=+0.000311562+8000 CST是指中国标准时间格式化时间time类型->字符串// 2018-...原创 2019-04-25 21:23:23 · 696 阅读 · 0 评论 -
golang os模块
fileprocess原创 2021-03-12 18:47:00 · 401 阅读 · 0 评论 -
golang 闭包
在for循环中使用闭包时,应该把外部变量作为参数传入闭包编译器检测报告闭包时,会把闭包引用的外部变量分配到堆上闭包中对外部变量的改变也会影响外部变量的值// 闭包底层实现type Closure struct { F unitptr // 函数指针 env *Type //外部环境变量集合指针;如果没有修改,则会优化为值传递...原创 2019-11-05 21:58:04 · 316 阅读 · 0 评论 -
golang 反射
反射为我们提供一种可以在运行时操作任意类型对象的能力我们可以查看一个接口变量的具体类型,看看一个结构体有多少字段,如何修改某个字段的值等等在Go的反射定义中,任何接口都会由两部分组成的,一个是接口的具体类型,一个是具体类型对应的值我们可以用reflect.ValueOf(t)和reflect.TypeOf(t)提取任意对象的Value和TypeValue中也包含了Type...原创 2019-10-24 22:57:29 · 217 阅读 · 1 评论 -
golang 安装
GO配置安装apt安装apt update && apt install -y golang卸载使用apt remove命令,然后使用apt autoremove移除依赖包注意这种方式只能安装1.6版本,如需更高版本(比如需要context包)请按照第二种方式安装安装包安装下载安装包wget https://golang.org/dl/go1.11.3...原创 2019-12-18 14:11:45 · 599 阅读 · 0 评论