golang
golang学习总结
读不懂的答案
一个不自律但很想成功的人
展开
-
26 (转)深度解密Go语言之unsafe
(转)深度解密Go语言之unsafe本文转载自:https://www.cnblogs.com/qcrao-2018/p/10964692.html文章目录(转)深度解密Go语言之unsafe1、指针类型2、什么是 unsafe3、为什么有 unsafe4、unsafe 实现原理5、unsafe 如何使用5.1 获取 slice 长度5.2 获取 map 长度5.3 map 源码中的应用5.4...转载 2019-06-26 15:49:02 · 168 阅读 · 0 评论 -
25 (转)图解Go语言内存分配
图解Go语言内存分配转载自:https://www.cnblogs.com/qcrao-2018/p/10520785.html作者写的很好文章目录图解Go语言内存分配1、基础概念2、内存管理单元3、内存管理组件3.1mcache3.2 mcentral3.3 mheap4、内存分配流程5、总结Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地...转载 2019-06-26 15:48:11 · 179 阅读 · 0 评论 -
24 Go语言——文件操作
文件操作文章目录文件操作1、File 标准库2、Open() 和Close()打开和关闭3、读取文件3.1 OS包 下的Open()和Read()3.2 bufio-带缓冲区的方式读取3.3 ioutil 包下的读取4、写文件操作应用实例4.1 os包下的写文件4.2 bufio 包下的写文件4.3 ioutil下的写文件5、文件编程应用实例5.1拷贝文件5.2 统计英文、数字、空格和其他字符数...原创 2019-06-26 15:47:25 · 1062 阅读 · 0 评论 -
23 Go语言——反射详解
Go语言——反射本文转载自: 深度解密Go语言之反射文章目录Go语言——反射1、什么是反射2、为什么要用反射3、反射是如何实现的types 和 interface反射的基本函数反射的三大定律4、反射相关函数的使用代码样例未导出成员5、反射的实际应用json 序列化DeepEqual 的作用及原理6、总结参考资料1、什么是反射直接看维基百科上的定义:在计算机科学中,反射是指计算机程序在运...转载 2019-06-26 15:46:42 · 320 阅读 · 0 评论 -
22Go 语言——序列化和反序列化
序列化和反序列化文章目录序列化和反序列化1、JSON的序列化1.1序列化 struct、map、slice1.2 自定义序列化后json key2 json反序列化3、第三方库1、JSON的序列化1.1序列化 struct、map、slice对于json的序列化和反序列化,go的encoding/json 包提供了一些列的方法。 常用的比如func Marshal(v interface...原创 2019-06-25 18:05:30 · 371 阅读 · 0 评论 -
21(转)go语言——log日志
文章目录log日志(转)1、日志使用2、实现原理3、定制自己的日志log日志(转)本文转载自:https://www.flysnow.org/2017/05/06/go-in-action-go-log.html可以关注原作者博客网站<http://www.flysnow.org/1、日志使用日志分析,就是根据输出的日志信息,分析挖掘可能的问题,我们使用fmt.Println系列函...转载 2019-06-25 18:04:55 · 241 阅读 · 0 评论 -
20 Go语言——测试
文章目录go语言测试1、单元测试1.1 基础单元测试1.2 表组测试1.3 模仿调用1.4 测试覆盖率2.基准测试2.1 进行基准测试2.2 性能对比go语言测试测试的目的是确认目标代码在给定的场景下,有没有按照期望工作 。一个场景是正向路经测试,就是在正常执行的情况下,保证代码不产生错误的测试。另外一些单元测试可能会测试负向路径的场景,保证代码不仅会产生错误,而且是预期的错误。总之,不管如...原创 2019-06-25 18:04:09 · 271 阅读 · 0 评论 -
19Go语言——包和包管理工具
包和包管理工具文章目录包和包管理工具1、包简介1.1 工作空间1.2 源文件1.3 包命名和声明1.4 main 包2、导包2.1 两种方式2.2 包的别名2.3 简洁模式2.4非导入模式(匿名导入)2.5 导包的路径2.6 远程导入3、初始化 init4、文档4.1 生成文档规范4.2 给文档添加示例函数5、包管理工具5.1 依赖管理快速了解5.2 Vendor 机制引入5.2.1 官方dep...原创 2019-06-25 18:03:29 · 3266 阅读 · 0 评论 -
18 (转)深度解密Go语言之context
(转)深度解密Go语言之context文章目录(转)深度解密Go语言之context1、什么是 context2、为什么有 context3、context 底层实现原理3.1整体概览3.2接口3.2.1Context3.2.2 canceler3.3结构体3.3.1 emptyCtx3.3.2 cancelCtx3.3.3 timerCtx3.3.4 valueCtx4、如何使用 contex...转载 2019-06-24 16:25:44 · 220 阅读 · 0 评论 -
17Go语言——几个并发模式
并发模式文章目录并发模式1、runner2、poolsync.Pool3、 work要想写出高效简单的并发程序,还需要了解下常用的 goroutine和channel以哪种方式写,下面介绍3种常用的并发模式,写出更简化高效的并发。1、runnerRunner 模式可以理解为执行者,也就是来控制程序的执行,它可以去执行任何程序,程序都是受监控的,可以去终止这些程序。当我们需要调度后台处理任务...原创 2019-06-24 16:17:20 · 413 阅读 · 0 评论 -
Go语言——map 源码分析
之前自己整理的map源码浅析,还是有些不理解的地方,这篇转载曹大的笔记,借鉴下原文地址:https://github.com/cch123/golang-notes/blob/master/map.mdmap ┌─────────────┐ ...转载 2019-05-24 21:46:40 · 602 阅读 · 0 评论 -
16 Go语言并发2——Channel
文章目录1、什么是channel2、channel的创建和传递2.1 make关键字创建2.2 <- 运算符 读和取2.3 close 函数关闭channel3、无缓冲的channel4、有缓冲的channel5、单项通道6、forange 迭代7、select 关键字7.1 处理多个channel发送和接收7.2 设置超时8、channel 总结9、channel 应用场景小结9.1 f...原创 2019-03-31 16:49:04 · 510 阅读 · 2 评论 -
15Go语言并发1——Goroutine
文章目录1、并发和并行1.1 进程和线程1.2 并发和并行的概念1.3 go语言逻辑处理器和调度器了解2、goroutine使用2.1 go 关键字创建goroutine2.2 简单使用waitgroup同步2.3 WaitGroup 传值问题3、资源竞争3.1 实用go 自带的竞争监测命令-race4、资源同步传统方式——加锁4.1原子函数atomic4.2 互斥锁 mutex1、并发和并行...原创 2019-03-29 16:53:56 · 317 阅读 · 0 评论 -
14 Go语言——接口 interface详解
Go语言——接口interface详解文章目录Go语言——接口interface详解1、Duck Typing 概念2、GO 语言interface特点3、接口定义3.1 接口类型3.2 接口的实现方式3.3 interface{}空接口的实现3.4 类型断言3.5 接口转换3.6 匿名接口4、接口的内部实现4.1 接口值4.2 接口内部结构5、方法集5.1 方法集定义5.2 方法集规则1、D...原创 2019-03-19 07:51:32 · 433 阅读 · 0 评论 -
13 Go语言——Struct和Method
Go语言——Struct 和Method文章目录Go语言——Struct 和Method一、结构体struct1、struct介绍2、struct 定义和初始化3、结构体比较4、匿名字段3、结构体嵌入二、Method1、方法声名2、值接收者和指针接收者2.3 使用值调用值接收者方法2.4 使用指针调用指针接收者方法2.5 使用指针调用值接收者方法2.6 使用值调用指针接收者方法3、匿名字段3、M...原创 2019-03-05 17:07:44 · 418 阅读 · 0 评论 -
12 Go语言map底层浅析
Go语言map底层浅析文章目录Go语言map底层浅析1、Hash函数2、map 源码2.1hmap(a header of map)2.2 bmap(a bucket of map)3、hmap和bmap结构图4、map的扩容5、结语笼统的来说,go的map底层是一个hash表,通过键值对进行映射。 键通过哈希函数生成哈希值,然后go底层的map数据结构就存储相应的hash值,进行索引,最终...原创 2019-03-04 14:31:14 · 341 阅读 · 0 评论 -
11 Go语言的映射——map
Go语言的映射——map文章目录Go语言的映射——mapMap介绍1、Map 的创建2、使用映射2.1为映射赋值2.1 未初始化的map,赋值报错,即 nil map2.2 从map 中获取值,并判断键是否存在2.3 用range迭代map2.4 map中的delete函数2.5 map作为参数传递3、从map取出的value是一个拷贝,对其成员修改没有意义类似其它语言中的哈希表或者字典...原创 2019-03-04 14:29:57 · 189 阅读 · 0 评论 -
10Go语言切片——slice
Go语言——slice文章目录Go语言——slice一、切片介绍二、内部实现和原理三、创建和初始化1、普通初始化(var或者:= ,字面量)2、使用make() 函数进行初始化3、使用索引声明切片4、从数组创建slice5、创建空的slice四、切片的使用1、直接用索引赋值2、reslice 也就是通过slice创建 slice3、append 增长slice(1)append 没有超过原始...原创 2019-02-26 16:46:52 · 401 阅读 · 0 评论 -
09Go语言数组——array
Go语言——数组array小结:数组⻓度必须是常量,且是类型的组成部分。 [2]int 和 [3]int 是不同类型。⽀持 “==”、 “!=” 操作符,因为内存总是被初始化过的。指针数组 [n]*T,数组指针 *[n]T。可以使用new来创建数组,此方法返回一个指向数组的指针数组是值类型,赋值和传参会复制整个数组,而不是指针。(指针数组也是值传递,将指针拷贝)值拷贝⾏为会造成性能...原创 2019-02-26 10:54:24 · 153 阅读 · 0 评论 -
08 Go字符串详解
Go字符串详解总结:字符串是不可变值类型,内部⽤指针指向 UTF-8 字节数组。默认值是空字符串 “”。⽤索引号访问某字节,如 s[i]。取出的是字节,不是字符不能⽤序号获取字节元素指针, &amp;amp;amp;amp;amp;amp;amp;amp;s[i] ⾮法。不可变类型,⽆法修改字节数组。使用[]rune进行修改是重新分配内存,并复制字节数组go语言的字符串是utf-8的定长字符序列,会自动转为Unic.原创 2019-01-18 11:58:33 · 439 阅读 · 0 评论 -
07 go语言函数
go语言函数1、函数定义2、参数3、返回值4、匿名函数5、闭包6、递归7、延迟调用8、错误处理函数特性:Go 函数 不支持 嵌套、重载和默认参数函数无需声明原型、支持不定长度变参、多返回值、命名返回值参数支持匿名函数、闭包函数也可以作为一种类型使用函数是一等公民,可作为参数传递函数传递是值的拷贝或者是指针的拷贝,区别在于会不会影响原始值...原创 2019-01-18 11:57:51 · 203 阅读 · 0 评论 -
06 Go语言常见语法错误
Go语言常见语法错误1、开大括号不能放在单独的一行错误代码:package mainimport &amp;amp;quot;fmt&amp;amp;quot;func main() { fmt.Println(&amp;amp;quot;hello world!&amp;amp;quot;)}编译错误:./main.go:5:6: missing function body for &amp;转载 2019-01-17 18:02:37 · 5285 阅读 · 0 评论 -
05 Go语言fmt包详解
Go语言fmt包详解格式化输出函数func Print(a ...interface{}) (n int, err error)Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。func Printf(format string, a ...interface{}) (n int, err e...原创 2019-01-17 16:02:28 · 362 阅读 · 0 评论 -
04 Go基本语法
Go基本语法1、运算符2、流程控制3、跳转语句1、运算符Go 语言内置的运算符有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。(1)算数运算符运算符描述+相加-相减*相乘/相除%求余++自增–自减(2)关系运算符运算符描述==检查两个值是否相等,如果相等返回 ...原创 2019-01-17 16:01:48 · 266 阅读 · 0 评论 -
03Go 类型总结
Go 类型总结1、内置类型和内置函数2、类型转换3、变量4、常量5、指针6、字符串7、自定义类型和类型别名1、内置类型和内置函数内置类型:类型⻓度默认值说明bool1false布尔型只有true和falsebyte10uint8的别名rune40Unicode Code Point, int32别名int, uint...原创 2019-01-17 16:00:45 · 237 阅读 · 0 评论 -
02go 基础知识
go 基础知识1、go程序结构2、go声明和命名3、关键字和保留字4、注释和可见性5、go语言内置类型和函数1、go 程序结构bin:存放程序生成的可执行文件。go install生成的就在这pkg: 存放编译后静态库 .a ,依赖的一些包编译后会在这生成src: 存放源代码2、go声明和命名一个名字必须以一个字母(Unicode字母) 或下划线开头,后面可以跟任意数量的字...原创 2019-01-16 23:10:34 · 188 阅读 · 0 评论 -
01Go 命令介绍
Go 命令介绍go 提供了一套强大好用的命令系统go build 编译包和依赖项go clean 删除目标文件go env 打印Go环境信息go fix 在包上运行go tool修复,用来修复老版本到新版本的问题go fmt 在包源上运行gofmtgo generate 通过处理源生成Go文件go get...原创 2019-01-16 15:14:16 · 464 阅读 · 0 评论