Go语言中文网 为您找到相关结果 24

GO PDF资源 汇总!

汇总密码下载链接:https://pan.baidu.com/s/1oqsCMKU8OXv7vt_srb1KOg 密码:7t4g PDF 合集下载链接:链接:https://pan.baidu.com/s/18s44v7f5HFTT_DL7qCf-9A 密码:5koe pdf 清单: Go语言学习笔记.雨痕(详细书签) go语言标准库 PDF 下载 Go并发编程实战 第2版_Lite PDF go语言程序设计 高清扫描版带书签 Go Web编程.(谢孟军).[PDF...阅读全文

博文 2018-07-31 23:35:28 REL9009

雨痕新作《Go语言学习笔记》出版了

《Go语言学习笔记》——雨痕著 出版了。购买地址: - [china-pub](http://product.china-pub.com/4971695) - [京东](http://item.jd.com/10466396823.html) 目录: ``` 上卷 语言详解 第1 章 概述 ............... 3 1.1 特征 ....................... 3 1.2 简介 ....................... 6 第2 章 类型 ..............18 2.1 变量 ..................... 18 2.2 命名 ..................... 22 2.3 常量 ........................阅读全文

Go 边看边练 -《Go 学习笔记》系列(一)

相信大家在看编程语言学习教程的时候都会难免觉得有点枯燥: 自己看书,遇到问题不方便求助 书上的代码片段、示例是静态的 虽然有时书上会给出运行输出,但是不够直观 自己拷贝代码到 IDE 里运行是也比较麻烦 即使运行了也要来回在 IDE 和书之间切换,还是麻烦 总之,程序员都是懒人 如果能边看边练就会舒服很多,书上的示例代码经过自己实际验证/微调后也更容易理解并消化。 基于这个出发点,Sym 社区决定给大家上干货中的干货: 从内容上:选择了雨痕的《Go 学习笔记》作为教程,该书言简意赅,讲解的都是 Go 关键点 从技术上:社区整合了 Go 黑科技——Wide,在技术上实现了边看边练! 即使你以前看过该书,我们也强烈建议你在这里再看一遍,因为这将会带来完全不一样的体验~ 光说不练假把式,上货! 1...阅读全文

博文 2015-08-19 08:57:27 88250

Go 边看边练 -《Go 学习笔记》系列(二)

上一篇: Go 边看边练 -《Go 学习笔记》系列(一) 1.3 基本类型 更明确的数字类型命名,支持 Unicode,支持常用数据结构。 类型 长度 默认值 说明 bool 1 false byte 1 0 uint8 rune 4 0 Unicode Code Point, int32 int, uint 4 或 8 0 32 或 64 位 int8, uint8 1 0 -128 ~ 127, 0 ~ 255 int16, uint16 2 0 -32768 ~ 32767, 0 ~ 65535 int32, uint32 4 0 -21亿 ~ 21 亿, 0 ~ 42 亿 int64, uint64 8 0 float32 4 0.0 float64 8 0.0 complex64 ...阅读全文

博文 2015-08-19 10:45:50 88250

Go 边看边练 -《Go 学习笔记》系列(三)

上一篇: Go 边看边练 -《Go 学习笔记》系列(二) 1.7 指针 支持指针类型 *T,指针的指针 **T,以及包含包名前缀的 *.T。 默认值 nil,没有 NULL 常量。 操作符 "&" 取变量地址,"*" 透过指针访问目标对象。 不支持指针运算,不支持 "->" 运算符,直接用 "." 访问目标成员。 不能对指针做加减法等运算。 x := 1234 p := &x p++ // Error: invalid operation: p += 1 (mismatched types *int and int) 可以在 unsafe.Pointer 和任意类型指针间进行转换。 返回局部变量指针是安全的,编译器会根据需要将其分配在 GC Heap 上。 func tes...阅读全文

博文 2015-09-04 21:37:03 88250

跟雨痕看go源码02.02- 并发清理与三色标记(未完待续)

据说这是go优化最狠的地方。 http://blog.csdn.net/erlib/article/details/51850912 大意是说twitch.tv觉得一次标记的STW(stop the world,就是jojo里面的技能,标记和回收时间很长,所有应用代码都无法工作)太强力了竟然需要2秒钟,不能忍,所以在和go开发团队多次沟通后,开始了大量的优化,这里的代码充斥着并发优化的痕迹。据说到了go1.7的时候STW仅剩下1毫秒。。。go1.5就已经达到了200ms(已经不错了哦)。 我们现在可以看一下go1.5所做的优化orz。大神好厉害。orz orz orz。 三色标记的基本逻辑: - 起初所有对象都是白色。 - 扫描找出所有可达对象标记为灰色,翻入待处理队列。 - 从队列中提取灰...阅读全文

博文 2016-08-16 03:00:05 bairongdong1

golang 数据一 (字符串、数组和数组指针)

从如下几个方面介绍GO语言的数据1. 字符串 2. 数组 3. 切片 4. 字典 5. 结构字符串Go语言中的字符串是由一组不可变的字节(byte)序列组成从源码文件中看出其本身是一个复合结构string.go type stringStruct struct { str unsafe.Pointer len int }字符串中的每个字节都是以UTF-8编码存储的Unicode字符字符串的头部指针指向字节数组的开始但是没有NULL或'\0'结尾标志。 表示方式很简单用双引号("")或者反引号(``)它们的区别是双引号之间的转义符会被转义而反引号之间的转义符保持不变反引号支持跨行编写而双引号则不可以{ println("hello\tgo") //输出hello go println(`hel...阅读全文

博文 2017-02-10 10:23:25 100018

golang的goroutine调度机制

一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,(基于go1.4) 感觉豁然开朗,受益匪浅; 去繁就简,再加上自己的一些理解,整理了一下 ~~ 调度器 主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中) 1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象 2. M代表一个线程,每次创建一个M的时候,都会有一个底层线程创建;所有的G任务,最终还是在M上执行 3. P代表一个处理器,每一个运行的M都必须绑定一个P,就像线程必须在么一个CPU核上执行一样 P的个数就是GOMAXPROCS(最大256),启动时固定的,一般不修改; M的个数和P的个数不一定一样多(会有休眠的M或者不需要太多的M)...阅读全文

博文 2016-10-28 03:00:01 liangzhiyang

golang中接口赋值与方法集

接口使用疑问 golang中的接口可以轻松实现C++中的多态,而且没有继承自同一父类的限制,感觉方便很多。但是在使用的时候,如果没有理解,也可能会遇到"坑"。比如《Go语言实战》中的一个例子: package main import "fmt" type user struct { name string email string } type notifier interface { notify() } func (u *user) notify() { fmt.Printf("sending user email to %s<%s>\n", u.name, u.email) } func sendNotification(n notifier) { n.notify() } func ...阅读全文

博文 2018-10-07 12:34:41 朱宇清

02.1跟雨痕看go源码-内存分配(分配&回收)

内存分配和垃圾回收有关,这里我们可以先看一下内存分配。 垃圾回收比较复杂,后面讲。 一开始雨痕大大说了几个基本策略: 每次从操作系统申请一大块内存(比如1MB),以减少系统调用。 将申请到的大块内存按预定大小预先切分成小块,构成链表。 为对象分配内存时,只需从大小合适的链表中提取一个小块即可。 回收对象内存时,将该小块内存重新归还到原链表,以便复用。 如果闲置内存过多,则尝试归还部分内存给操作系统,降低内存开销。 里面提到了两个概念 span: 就是1提到的大块内存被切成小块的链表。 object: 就是上面说的小块。 这里span虽然是按照小块的规格进行了分级,但实际上采取了比较灵活的策略,可能会在必要条件下把较大规格span的链表的一部分借给较小规格的span,实际合并时也会尝试合并相邻...阅读全文

博文 2016-09-12 13:00:01 bairongdong1

golang的goroutine调度机制

golang的goroutine调度机制 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 一直对goroutine的调度机制很好奇最近在看雨痕的golang源码分析基于go14 这篇文章是去年整理的记录公司内部wiki上 一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,(基于go1.4) 感觉豁然开朗,受益匪浅; 去繁就简,再加上自己的一些理解,整理了一下 ~~ 调度器 主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中) 1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象 2. M代表一个线程,每次创建一个M的时候,都会有一个底层线程创建;所有的G任务,最终还是在...阅读全文

博文 2017-11-22 13:00:01 xuyuan77

Golang 优化之路——空结构

写在前面 开发 hashset 常用的套路: map[int]int8 map[int]bool 我们一般只用 map 的键来保存数据,值是没有用的。所以来缓存集合数据会造成内存浪费。 空对象 空对象是个神奇的东西。它指的是没有字段的结构类型。 type Q struct{} 它牛逼的地方在于: 可以和普通结构一样操作 var a = []struct{}{struct{}{}} fmt.Println(len(a)) // prints 1 不占用空间 var s struct{} fmt.Println(unsafe.Sizeof(s)) // prints 0 声明两个空对象,它们指向同一个地址 type A struct{} a := A{} b := A{} fmt.Println...阅读全文

博文 2017-05-09 09:51:00 Superman1316

Golang 内存逃逸分析

0x01 什么是逃逸第一次听说逃逸是在雨痕学堂,一脸懵逼的百度了半天也没找到一个明确的说法,直到昨天在论坛上看到一篇关于变量逃逸的文章才明白。 因为函数都是运行在栈上的,在栈声明临时变量分配内存,函数运行完毕再回收该段栈空间,并且每个函数的栈空间都是独立的,其他代码都是不可访问的。 但是在某些情况下,栈上的空间需要在该函数被释放后依旧能访问到,这时候就涉及到内存的逃逸了。 代码: 1234567891011121314151617type data struct { name string}//go:noinlinefunc f1()data{ d := data{"maqian"} return d}//go:noinlinefunc f2() *data { d := data{"maq...阅读全文

博文 2018-05-17 09:22:29 马谦的博客

Golang学习历程

序:The 5 stages of learning Go (with examples)GO 语言学习的五个阶段(带例子)Github--GolangThe Go Programming LanguageGo 编程语言Go 编程语言 --------Github 学习篇 基础篇(菜逼) 视频 Go编程基础 书籍 Go语言圣经(中文版) Effective Go中文版 Go入门指南 网站 Google Go语言 进阶篇(探索者) 视频 Go Web 基础 Go名库讲解 书籍 看云Golang图书 中阶篇(大手) 视频 书籍 GO 命令教程雨痕的《go 语言学习笔记》 高手篇(大神) 视频 书籍 牛人篇(布道者) 视频 书籍 工具篇 # Go Walker - Go 语言在线 API 文档 G...阅读全文

博文 2017-03-05 19:42:26 紫若丹枫

golang中goroutine调度机制(转载)

载自https://blog.csdn.net/liangzhiyang/article/details/52669851 调度器主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中)1. G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象2. M代表一个线程,每次创建一个M的时候,都会有一个底层线程创建;所有的G任务,最终还是在M上执行3. P代表一个处理器,每一个运行的M都必须绑定一个P,就像线程必须在么一个CPU核上执行一样P的个数就是GOMAXPROCS(最大256),启动时固定的,一般不修改; M的个数和P的个数不一定一样多(会有休眠的M或者不需要太多的M)(最大10000);每一个P保存着本地G任务队列,也有一个全...阅读全文

博文 2018-10-07 17:35:45 ck_god

狗日的slice

首先推荐一下雨痕大神的新书:《Golang源码剖析(第五版)》。 进入正题。Golang和其它语言不通的是,他增加了一个slice,这不同于传统的数组,但是我们使用它又要按照数组的用法来,容易混淆。 先说一下我理解的传统数组,数组的名称就是数组在内存里面的首地址,访问每个子元素就是首地址加子元素长度访问。所以这应该是一个引用对象类型。 而Golang的slice,引用一下雨痕大神的文章说明: runtime.h struct Slice { byte* array; uintgo len; uintgo cap; } slice底层是通过struct实现的,所以传递的时候是值拷贝传递,但是,slice的内容是通过数组指针实现的。就会发生这种现象:***通过值传递,len和cap都不会变,所以...阅读全文

博文 2017-02-09 08:15:18 Bryce

Golang笔记03《Go程序设计语言》第一章入门

《Go程序设计语言》第一章入门 永痕的Hello World package main import "fmt" func main(){ fmt.Println("Hello World") } 输入命令 go run hello.go,如果您输入的程序是正确的,那么会输出 Hello World 这就是go语言的最简单的最基础的代码,但是我们需要注意的事情是: 简单的事情不代表不重要 简单的事情不代表不重要 简单的事情不代表不重要 重要的事情说三次 end.....阅读全文

博文 2019-06-14 23:32:43 我加入简书的路程

golang中接口赋值与方法集

接口使用疑问 golang中的接口可以轻松实现C++中的多态,而且没有继承自同一父类的限制,感觉方便很多。但是在使用的时候,如果没有理解,也可能会遇到"坑"。比如《Go语言实战》中的一个例子: package main import "fmt" type user struct { name string email string } type notifier interface { notify() } func (u *user) notify() { fmt.Printf("sending user email to %s<%s>\n", u.name, u.email) } func sendNotification(n notifier) { n.notify() } func ...阅读全文

博文 2018-10-07 12:34:42 StormZhu

beego中的缓存

bm, _ := cache.NewCache("memory", `{"interval":60}`) bm.Put("name", "李雨初", 600*time.Second) fmt.Println(bm.Get("name")) put进去直接get取出是可以,但是我设置了600秒的有效时间,为什么下面这样就取不出来了 bm, _ := cache.NewCache("memory", `{"interval":60}`) // bm.Put("name", "李雨初", 600*time.Second) fmt.Println(bm.Get("name")) 缓存的60秒无效了还是我概念哪里理解错了??...阅读全文

新手如何学 Go 语言?

学习任何东西,基础都很重要。基础就好比建筑的地基,只有地基牢固了,才能建成高楼大厦。学习编程语言亦是如此。很多人喜欢一上来就学习各种框架,其实那些框架对你来说都是工具,你自己的基础好,懂得了它们的原理,自己也有能力创造更优秀的框架。 新手学习 Go 语言,推荐学习如下资源:(推荐按顺序学习) 一、官方文档。(英文好的可以看英文 http://docs.studygolang.com 或者看如下列出的中文翻译版)有四个文档推荐阅读: * Go 语言之旅 http://tour.studygolang.com/ * 语言规范 http://docscn.studygolang.com/ref/spec.old * Effective Go http://docscn.stu...阅读全文