Go语言基础
Golang FundamentsGo语言基础 Golang Fundaments 中山大学 数据科学与计算学院 潘茂林 panml@mail.sysu.edu.cn 大纲 • Golang-设计哲学 • 基础知识学习 • Go语言的入门资源 • 本地项目工作空间组织 • 开始编程 Golang-设计哲学 我们需要什么样的语言 • 曾经 – 我们对包含大量代码的程序印象深刻。 – 我们努力在代码库中创建大型抽象。 重视反省和自我检讨。 Go语言应该是这样的 • 易于阅读代码 • 对遗存软件友好 • 心智模型 • 生产率与性能 • 正确性与性能 • 规则 • 方便代码评审 – 完整性 – 可读性 – 简单性 – 性能 – 微优化 Ultimate Go,https://github.com/ardanlabs/gotraining/blob/master/topics/go/README.md 实用主义的语言风格 – 面向编译器的静态类型语言 • 数据类型必须在编译阶段确定 • 语言能充分发挥编译优化技术 – 复古且简便的语言 • 集合了多种语言实用的语法表示 • 函数是一等公民(First-Class Functions) • 抛弃了面向对象 – 开放(几乎所有资源都在github上) • 语法基本特点 – C 语言的身体(语法基本类似C语言) – Python 语言的模样(部分语法如Python的编程效率)0 码力 | 21 页 | 851.30 KB | 1 年前3
2.2.3 Go语言的抢占式调度Go 语⾔的抢占式调度 曹春晖 资深 Gopher ⽬ 录 Go 程序的启动 01 GMP 的本质 02 调度循环的实现 03 ⽼版本的抢占实现 04 新版本的抢占实现 05 当前的 Go 语⾔还有哪些问题 06 Go 程序的启动 第⼀部分 编译过程 Go 程序 hello.go 的编译过程: ⽂本 -> 编译 -> ⼆进制可执⾏⽂件 编译过程 编译:⽂本代码 -> -> ⽬标⽂件(.o,.a) 链接:将⽬标⽂件合并为可执⾏⽂件 使⽤ go build -x 可以观察这个过程 可以⼿动分步骤执⾏: 1. go tool compile hello.go 2. go tool link hello.o 可执⾏⽂件 Linux 的可执⾏⽂件 ELF(Executable and Linkable Format) 为例, ELF 由⼏部分构成: ELF header point 找到 Go 进程的执⾏⼊⼝,使⽤ readelf ⼯具 这样我们就找到了 Go 进程要从哪⾥启 动了 花式寻找 entry point GDB Cutter Hopper rizin 启动过程 通过 entry point 找到 Go 进程的执⾏⼊⼝ runtime.rt0_go argc argv 处 理 全 局 m0 g0 初 始 化 m0: Go 程序启动后创建的第⼀个线程;0 码力 | 44 页 | 7.43 MB | 1 年前3
Go语言 - 一些简单的读书分享⼀些简单的读书分享 By Xargin 我出版的书 • 我是作者之⼀ • 这本书在写的时候国内的 Go 语⾔书很少 • 现在销量约 2w+ • 直到现在,CGO 和 plan9 汇 编的内容依然是独⼀份 ⽬ 录 为什么要读书 01 带着问题读书 02 怎么样读书 03 应该读哪些书 04 为什么要读书 第⼀部分 • 完整的知识和上下⽂ • 帮助⾃⼰建⽴领域内的知识体系0 码力 | 16 页 | 9.09 MB | 1 年前3
用Go语言实现推送服务器用Go语言实现推送服务器 陈叶皓 chen.yh@ctrip.com 议程 • 推送服务器介绍 • Golang特点 • 推送服务架构 • 部分代码 • 上线效果 议程 • 推送服务器介绍 • 推送服务架构 • 部分代码 • 上线效果 什么是推送服务器 • 推送业务信息到手机端 • 始终保持连接 推送服务器要求 • 高并发 • 可靠性 • 高性能 • 支持水平扩展 • 无单点故障 无单点故障 Go语言特性 • 静态的、编译的 • 自动内存回收 • 命令式编程 • 函数可以作为值 • 面向并发 • 内置RPC支持 推送服务器要求的应对 • 高并发 – goroutine • 可靠性 – 使用Redis暂存消息 • 高性能 – 静态编译语言 • 支持水平扩展 – 使用RPC组成集群 • 无单点故障 – 使用Redis实现数据共享 Go语言的并发模型 • 事件驱动,共享线程池 事件驱动,共享线程池 runtime.GOMAXPROCS(runtime.NumCPU()) • 使用“go”命令创建goroutine go sockstore.Start() • goroutine使用channel交换消息 – 异步场景,直接往指定channel发送数据 – 同步场景,往channel发送的数据中,包含一 个获取返回值的channel 议程 • 推送服务器介绍 •0 码力 | 25 页 | 260.04 KB | 1 年前3
Go语言最差实践 - 李俱顺Go Worst Practices 李俱顺(Kevin Lee) EKEYNOW Pte Ltd. $ whoami About Me • Gopher & Pythonista • CTO @ EKEYNOW Pte Ltd. • Community Contributor @ GoCN About ekeynow • A IoT SaaS startup company. All All system powered by Go. Best practice is useless, we only learn from worst practice. Trying to copy the best others have done amounts to ignoring context of both place and time, and reduces you SETTING TIMEOUT Go Concurrency Patterns: Context https://blog.golang.org/context #3 OVERREACHING FOR CONCURRENCY OVERREACHING FOR CONCURRENCY https://github.com/system-pclub/go-concurrency-bugs0 码力 | 38 页 | 3.27 MB | 1 年前3
1.1 Go语言游戏项目应用情况汇报Go语⾔言游戏项⺫⽬目应⽤用情况汇报 厦⻔门真有趣信息科技有限公司 达达 项⺫⽬目介绍 • 2012年 - 2015年,仙侠道⺴⽹网⻚页版,使⽤用Go语⾔言替代神仙 道时期的Erlang,开发流程和主要架构不变 • 2014年 - 2015年,仙侠道⼿手机版,在原有架构基础上拆分 游戏逻辑服务器,分离互动功能 游戏服务端的挑战 • 请求频繁 • 实时性要求⾼高(百毫秒的延迟便可被感知)0 码力 | 21 页 | 1.63 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧1010 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 1 目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧1010 码力 | 591 页 | 21.40 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践Weibo: @johntech-o Date: 2015.04.25 go语⾔言并发编程实践 以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 50+内部产品,万款开发平台app 实时⻓长连接数亿量级,⽇日独数⼗十亿量级 1分钟内亿量级⼲⼴广播,⽇日下发峰值百亿量级 400台物理机,9个独⽴立集群,国内外近10个IDC 运维管理的go语⾔言编写的常驻service服务实例接近3000个。 业务场景多样: ⽀支持聊天场景业务,稳定⽀支持多款聊天业务app 单通道多app复⽤用 上⾏行通道,回调⽀支持 对智能硬件产品,提供定制化消息推送与转发服务 的fd绑定的回调函数和参数进⾏行回调操作 对外的通信采取阻io或者也可以go出去,不 阻塞主循环 对外通信信全局消息list,在映射到的 eventloop上开连接池进⾏行消耗 推荐使用 开发体会的对⽐比 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 问题与瓶颈 问题与瓶颈 单机内存占⽤用 ⾼高达69G0 码力 | 39 页 | 5.23 MB | 1 年前3
共 961 条
- 1
- 2
- 3
- 4
- 5
- 6
- 97













