2.1 gofmt 的文化演变
4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 1/34 gofmt 的文化演变 The Cultural Evolution of gofmt Robert Griesemer Google, Inc. 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 golang.org代码库中所有提交的Go代码都必须通过gofmt格式化过 除了gofmt之外,相同功能可以通过go/format库获得 不需要设置! 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 3/34 初衷 代码审查是软件工程的最佳实践 代码审查是基于代码规范和正规格式的 太多时间浪费在审查格式上而不是代码本身了 太多时间浪费在审查格式上而不是代码本身了 但是这工作对机器来说是最好不过了的 第一个决定就是要写一个好的格式美化器 4/21/2015 gofmt 的文化演变 http://127.0.0.1:3999/gofmt-cn.slide#1 4/34 历史 格式美化器和代码美化工具在计算机发展的早期就已出现 对于产生可读的Lisp代码很重要的: GRINDEF (Bill Gosper, 1967)0 码力 | 34 页 | 9.97 MB | 1 年前3Go 1.18 中的泛型
Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 1 语法和使用 2 什么时候需要泛型? 3 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的 类型: type T interface { Add(T) T } func Sum(elems ...T) (sum T) { // T 可以是任何实现 可以是任何实现 Add() 的类型 if len(elems) == 0 { return } sum = elems[0] for _, v := range elems[1:] { sum = sum.Add(v) } return } 当使用类型参数作为函数的形参类型时,函数调用方传递的实际参数必须是满足类型参数所约束的类型: func GenericSum[S ~int](elems ...S) (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 for i := range elems { sum += elems[i] } return } 使用泛型的根本目的是: 类型安全的参数传递,以及对实现的类型进行抽象 具有类型参数 (Type Parameter) 的签名 4 func F[T C](v T) (T, error)0 码力 | 45 页 | 501.50 KB | 1 年前3基于 mesos 的容器调度框架
2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 1/36 基于 mesos 的容器调度框架 Gopher 杭州 meetup 5 August 2017 黄励博(huangnauh) 又拍云 2017/8/3 基于 mesos 的容器调度框架 http://go-talks 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 3/36 Mesos 介绍 Image credit: mesos.apache.org (http://mesos.apache.org/) 官方称之为分布式系统内核, 它把数据中心的 CPU、内存、磁盘等抽象成一个资源池 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 4/36 Mesos 调度 各个 Agent 启动后, 向 Master 注册,携带统计资源, 由 Master 决定给每个框架多少资源, 默认 采用分级主导资源公平算法 每个框架收到资源后, 根据自身任务需求, 调度任务的资源分配0 码力 | 36 页 | 2.49 MB | 1 年前32.5 Go在猎豹移动的应用
我们做了啥? 业务 猎豹移动全球passport体系; 游戏开放平台; 游戏支付体系; 平台 基于gopush的推送平台&goim; 基于redis sentinel的smart client; rpc框架; gosnowflake发号器集群; goconf统一配置管理; 接入层优化 DNS在移动网络下不适用; Web站点是PHP开发的,通过RPC交互; rpc和api都是基于Go开发的服务; 国内DNS->VIP->lvs->tengine->Go; 海外DNS->ELB DNS->ELB->Go; Service之间通过Thrift或者net/rpc通讯; 依赖redis sdk访问redis; 直连mysql; 用户的所有业务逻辑基于Go处理; 服务应该是无状态的; api服务出现瓶颈的时候,直接scale out; graceful restart依赖健康检测; api质量监控,使用日志来追踪,通过本 地日志+flume+hdfs+hive; 实时监控可以考虑flume sink到kafka,再 依赖Spark计算; RPC 协议&远程调用的选型; net/rpc,thrift,grpc等;0 码力 | 24 页 | 4.26 MB | 1 年前32.2.3 Go语言的抢占式调度
Go 语⾔的抢占式调度 曹春晖 资深 Gopher ⽬ 录 Go 程序的启动 01 GMP 的本质 02 调度循环的实现 03 ⽼版本的抢占实现 04 新版本的抢占实现 05 当前的 Go 语⾔还有哪些问题 06 Go 程序的启动 第⼀部分 编译过程 Go 程序 hello.go 的编译过程: ⽂本 -> 编译 -> ⼆进制可执⾏⽂件 编译过程 编译:⽂本代码 -> go build -x 可以观察这个过程 可以⼿动分步骤执⾏: 1. go tool compile hello.go 2. go tool link hello.o 可执⾏⽂件 Linux 的可执⾏⽂件 ELF(Executable and Linkable Format) 为例, ELF 由⼏部分构成: ELF header Section header Sections https://github 可执⾏⽂件在不同的操作系统上规范不⼀样 Linux Windows MacOS ELF PE Mach-O Entry point 操作系统执⾏可执⾏⽂件的步骤(以 linux 为例): 解析 ELF Header 加载⽂件内容 ⾄内存 从 entry point 开始 执⾏代码 寻找 entry point 通过 entry point 找到 Go 进程的执⾏⼊⼝,使⽤ readelf0 码力 | 44 页 | 7.43 MB | 1 年前3Go Web编程
因为自己对Web开发比较感兴趣,所以最近抽空在写一本开源的书籍《Go Web编程》《Build Web Application with Golang》。写这本书不表示我能力很强,而是我愿意分享,和大家一起分享Go写Web应用的一些东西。 对于从PHP/Python/Ruby转过来的同学了解Go怎么写Web应用开发的 对于从C/C++转过来的同学了解Web到底是怎么运行起来的 我一直认为知识是用来分享的,让更多的人分享自己拥有的一切知识这个才是人生最大的快乐。 是人生最大的快乐。 这本书目前我放在Github上,我现在基本每天晚上抽空会写一些,时间有限、能力有限,所以希望更多的朋友参与到 这个开源项目中来。 撰写方法 撰写方法 文件命名 文件命名 每个章节建立一个md文件,如第11章的第3节,则建立11.3.md 11.3.md。 代码文件 代码文件 代码文件置于src目录之下。每小节代码按目录存放。如第11章的第3节的代码保存于src/11 请参看已有章节的规范,要注意的是,每个章节在底部都需要有一个links节,包含“目录”,“上一节”和“下一 节”的链接。 代码 代码 代码要go fmt后提交。注释文件注明其所属章节。 如何编译 如何编译 build.go依赖markdown的一个解析包,所以第一步先 go get github.com/russross/blackfriday 这样读者就可以把相应的Markdown文件编译成html文件,执行go0 码力 | 295 页 | 5.91 MB | 1 年前31.8 Go 在持续交付中的实践
0 码力 | 33 页 | 7.85 MB | 1 年前3对 Go 程序进行可靠的性能测试
对 Go 程序进行可靠的性能测试 Changkun Ou https://changkun.de/s/gobench/ Go 夜读系列 |talkgo.org|Talk Go|第 83 期 March 26, 2020 # Go 1.13 / 1.14 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 主要内容 ● 可靠的测试环境 ● benchstat ○ 例2: Benchmark 的正确性分析 ○ 例3: 其他的影响因素 ● 假设检验的原理 ● 局限与应对措施 ● 总结 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 教科书式的性能测试方法论 3 在《Software Testing: Principles and Practices》一书中归纳的性能测试方法论: 1. 搜集需求 8. 向客户推荐合适的配置 可靠的测试环境 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 什么是可靠的性能基准测试环境 5 影响测试环境的软硬件因素 ● 硬件:CPU 型号、温度、IO 等 ● 软件:操作系统版本、当前系统调度的负载等 指导思想 ● 单次测量结果毫无意义,统计意义下可对比的结果是关键 ○ 分析测试的场景、多次测量、决定统计检验的类型0 码力 | 37 页 | 1.23 MB | 1 年前3基于amqp实现的golang消息队列MaxQ
7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 1/22 基于amqp实现的golang消息队列 MaxQ 2017-07-01 张培培 饿了么-基础框架组 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 MaxQ架构模型 5. MaxQ相关特性 6. 使用场景和案例 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 3/22 1. 队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 堆积能力 消息可靠性 生产消费关系 Pull/Push 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 5/22 2. IPC消息队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq0 码力 | 22 页 | 1.45 MB | 1 年前3Go Module在又拍云的实践
0 码力 | 28 页 | 12.85 MB | 1 年前3
共 98 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10