12 2020 档案

摘要:panic支持抛出任意类型的异常(而不仅仅是error类型的错误),recover函数调用的返回值和panic函数的输入参数类型一致,它们的函数签名如下: func panic(interface{}) func recover() interface{} Go语言函数调用的正常流程是函数执行返回语 阅读全文
posted @ 2020-12-25 11:23 hubb 阅读(126) 评论(0) 推荐(0) 编辑
摘要:让我们演示一个文件复制的例子:函数需要打开两个文件,然后将其中一个文件的内容复制到另一个文件: func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if er 阅读全文
posted @ 2020-12-25 11:05 hubb 阅读(123) 评论(0) 推荐(0) 编辑
摘要:由于rebase执行速度慢,分支同步主干代码时,分支的每次提交都可能和主干产生冲突,需要解决的次数太多,影响提交效率。 同时,为了保证主干提交线干净(可以安全回溯),所以采用下面所说的merge法。 merge法 核心: (master) git merge feature --squash 意思是 阅读全文
posted @ 2020-12-25 10:56 hubb 阅读(107) 评论(0) 推荐(0) 编辑
摘要:场景一:RPC调用 在主goroutine上有4个RPC,RPC2/3/4是并行请求的,我们这里希望在RPC2请求失败之后,直接返回错误,并且让RPC3/4停止继续计算。这个时候,就使用的到Context。 这个的具体实现如下面的代码。 package main import ( "context" 阅读全文
posted @ 2020-12-25 10:35 hubb 阅读(392) 评论(0) 推荐(0) 编辑
摘要:正文 Goland设置代码格式化 进入设置,按需选择要使用的, VsCode 使用的是 go fmt设置成功后每次手动保存会格式化你的代码 Goland设置前进后退按钮# 勾选该项即可在最上层出现前进后退的按钮, 点击即可前进后退 阅读全文
posted @ 2020-12-25 10:30 hubb 阅读(752) 评论(0) 推荐(0) 编辑
摘要:一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型的一部分。由于Go语言的源代码要求是UTF8编码,导致Go源代码中出现的字符串面值常量一般也是UTF 阅读全文
posted @ 2020-12-24 16:57 hubb 阅读(137) 评论(0) 推荐(0) 编辑
摘要:数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组的长度是数组类型的组成部分。因为数组的长度是数组类型的一个部分,不同长度或不同类型的数据组成的数组都是不同的类型,因此在Go语言中很少直接使用数组(不同长度的数组因为类型不同无法直接赋值)。和数组对应的类型是切片,切 阅读全文
posted @ 2020-12-24 16:56 hubb 阅读(108) 评论(0) 推荐(0) 编辑
摘要:我们先看看切片的结构定义,reflect.SliceHeader: type SliceHeader struct { Data uintptr Len int Cap int } 可以看出切片的开头部分和Go字符串是一样的,但是切片多了一个Cap成员表示切片指向的内存空间的最大容量(对应元素的个数 阅读全文
posted @ 2020-12-24 16:53 hubb 阅读(167) 评论(0) 推荐(0) 编辑
摘要:避免切片内存泄漏 如前面所说,切片操作并不会复制底层的数据。底层的数组会被保存在内存中,直到它不再被引用。但是有时候可能会因为一个小的内存引用而导致底层整个数组处于被使用的状态,这会延迟自动内存回收器对底层数组的回收。 例如,FindPhoneNumber函数加载整个文件到内存,然后搜索第一个出现的 阅读全文
posted @ 2020-12-24 16:50 hubb 阅读(2733) 评论(0) 推荐(0) 编辑
摘要:切片内存技巧 在本节开头的数组部分我们提到过有类似[0]int的空数组,空数组一般很少用到。但是对于切片来说,len为0但是cap容量不为0的切片则是非常有用的特性。当然,如果len和cap都为0的话,则变成一个真正的空切片,虽然它并不是一个nil值的切片。在判断一个切片是否为空时,一般通过len获 阅读全文
posted @ 2020-12-24 16:49 hubb 阅读(295) 评论(0) 推荐(0) 编辑
摘要:func RemoveDuplicateElement(stringList []string) []string { result := make([]string, 0, len(stringList)) temp := map[string]struct{}{} for _, item := 阅读全文
posted @ 2020-12-16 11:46 hubb 阅读(324) 评论(0) 推荐(0) 编辑
摘要:执行一个简单协程 package main import ( "fmt" "time" ) func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second) }分析: 为什么会有sleep 呢, 主 阅读全文
posted @ 2020-12-14 11:34 hubb 阅读(241) 评论(0) 推荐(0) 编辑
摘要:比如有一个文件: config.php 里面有一些本地开发环境参数,不需要提交 git update-index --assume-unchanged config.php 执行 git status 就看不到config.php 文件了 如果需要提交config.php文件了,执行: git up 阅读全文
posted @ 2020-12-14 10:22 hubb 阅读(2463) 评论(0) 推荐(0) 编辑
摘要:假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在map中,最终显示出来,要求使用goroutine。 分析: (1)使用goroutine完成,效率高,但是会出现并发/并行安全问题; (2)不同协程之间如何通信; 对于(1):不同协程之间可能同时对一块内存进行操作,导 阅读全文
posted @ 2020-12-13 21:13 hubb 阅读(131) 评论(0) 推荐(0) 编辑
摘要:假设我们现在有这么一个需求: 计算1-200之间各个数的阶乘,并将每个结果保存在mao中,最终显示出来,要求使用goroutime。 分析: (1)使用goroutime完成,效率高,但是会出现并发/并行安全问题; (2)不同协程之间如何通信; 对于(1):不同协程之间可能同时对一块内存进行操作,导 阅读全文
posted @ 2020-12-13 21:09 hubb 阅读(969) 评论(0) 推荐(0) 编辑
摘要:首先得了解: 进程 线程 并发 并行 Go协程和Go主线程: 主线程:相当于进程;直接作用于cpu上,是重量级的,是物理态的; 协程:相当于轻量级的线程;由主协程开启,是逻辑态的; Go协程的特点: 有独立的栈空间 共享程序堆单元 调度由用户控制 协程是轻量级的线程 举个例子: package ma 阅读全文
posted @ 2020-12-13 21:08 hubb 阅读(114) 评论(0) 推荐(0) 编辑
摘要:package commonimport ( "fmt" "strings" "time")const DATE_FORMAT = "2006-01-02 15:04:05"const DATE_FORMAT_YMD = "2006-01-02" //获取时间差, 返回天时分秒func GetTim 阅读全文
posted @ 2020-12-13 19:32 hubb 阅读(296) 评论(0) 推荐(0) 编辑
摘要:概念:吉格勒定理1.是什么设定高目标就等于达到了目标的一部分。这就是管理界赫赫有名的吉格勒定理,其旨在告诉管理者,成功始于一个高的目标,因为有目标就会有达到目标的动力,那些一事无成的人,往往就是因为缺少雄心勃勃、排除万难、迈向成功的动力,而不敢为自己制定高远的奋斗目标。2.为什么开始时心中就怀有一个 阅读全文
posted @ 2020-12-09 10:33 hubb 阅读(765) 评论(0) 推荐(0) 编辑
摘要:概念:检视阅读1.用快速浏览的方式去阅读一本书、咨询等,快速获取并判断书或文章的类型及其中的主要信息、主张、观点是否对你价值,从而决定你要不要继续花时间去读这本书的过程。2.在有限的时间里,快速发掘你想要的咨询、观点、主张或知识,确定书籍值不值得读。用这种快速路浏览的方式来阅读一本书,就像是一个打谷 阅读全文
posted @ 2020-12-09 10:32 hubb 阅读(415) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示