Golang 101(Go语言101 中文版) v1.21.a第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘 ? 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是 本书和Go101.org网站不断增容和维护的动力。 赞赏 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 ? 解使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的 类型参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情 形。 本书由老貘 ? 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是 本书和Go101.org网站不断增容和维护的动力。 赞赏 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 ? Donizetti、 Emmanuel T Odeke、 Filippo Valsorda、 Dominik Honnef、 和 Rob 'Commander' Pike 等。 感谢直接参与本书写作和改进的Go社区成员,包括: Amir Khazaie、 Ziqi Zhao、 Artur Kirillov、 Arinto Murdopo、 Andreas Pannewitz、 Jason-Huang、0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本 书和Go101.org网站不断增容和维护的动力。 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 获 取本书最新版) 使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的 类型参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情形。 本书由老貘 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本 书和Go101.org网站不断增容和维护的动力。 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101 获 取本书最新版) Donizetti、 Emmanuel T Odeke、 Filippo Valsorda、 Dominik Honnef、 和 Rob 'Commander' Pike 等。 感谢直接参与本书写作和改进的Go社区成员,包括: Amir Khazaie、 Ziqi Zhao、 Artur Kirillov、 Arinto Murdopo、 Andreas Pannewitz、 Jason-Huang、0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和 Go101.org网站不断增容和维护的动力。 赞赏 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101获 取本书最新版) html)一书来了解使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的类型 参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情形。 本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和 Go101.org网站不断增容和维护的动力。 赞赏 (请搜索关注微信公众号“Go 101”或者访问github.com/golang101/golang101获 取本书最新版) Donizetti、 Emmanuel T Odeke、 Filippo Valsorda、 Dominik Honnef、 和 Rob 'Commander' Pike 等。 感谢直接参与本书写作和改进的Go社区成员,包括: Amir Khazaie、 Ziqi Zhao、 Artur Kirillov、 Arinto Murdopo、 Andreas Pannewitz、 Jason-Huang、0 码力 | 591 页 | 21.40 MB | 1 年前3
GoFrame框架介绍及设计我们只需要了解一个框架的内容变化,而不是数十个模块的内容变化 • 升级的时候只需要升级一个框架版本,而不是数十个模块版本的升级 • 减轻心智负担,提高模块可维护性,更容易保证各业务项目的模块版本一致性 改进: 模块化设计-常见问题 1. 模块低耦设计:文件层面的源文件下载与模块之间的逻辑耦合没有直接关系 2. 框架核心精简:功能强大且代码精简,包含测试与示例代码共8MB容量 3. 编译语言特性 项目依赖的模块过多,项目整体的稳定性会受到影响 • 项目依赖的模块过多,项目无从下手是否应当升级这些模块版本 • 各个模块孤立设计,单独看待每个模块可替换性很高,开发体系难以建 立,开发规范难以统一 改进: • 框架核心维护较全面的通用基础模块,降低基础模块选择成本 • 我们只需要维护一个统一的框架版本,而不是数十个模块版本 • 我们只需要了解一个框架的内容变化,而不是数十个模块的内容变化 • 使用困惑,开发效率低 • 包管理困难,容易出现 cycle import 循环引用问题 改进: • 代码分层设计,降低代码耦合 • 功能逻辑按照对象封装,细化封 装粒度,降低单包职责 • 规避了同名包名的问题 • 规避了 cycle import 问题 常见项目架构示例2 常见项目架构示例1 对象封装改进 对象封装设计-资源命名规范 在三层架构设计模式下,我们的业务包命名 仅会有 a0 码力 | 37 页 | 8.84 MB | 1 年前3
Go 2 Generics? A (P)review包 import ○ []P(T) 存在二义,但 []P(T1, T2) 不会出现二义仍无法直接使用, 见 changkun/go2generics/bugs/1/ ● 2020-03-19:改进 ○ 支持编写 <-、...、switch、select,支持第三方包 import ○ 但使用 testing 时部分包导入功能失效,见 changkun/go2generics/bugs/2/ ○ 不明原因无法导入 errors 包 `can't find any importable name in package "errors"` ● 2020-04-03 & 2020-04-09:改进 ○ 仍然不支持泛型指 针 contract C(T) { *T M() },见 changkun/go2generics/bugs/2/ ○ 修复 changkun/go2generics/bugs/2/ 次迭代、吸取了诸多决策失误的经验 ○ 目前的实现粗略的说是一种基于特设多态实现的参数化多态 ● 目前的实现相对完整,但存在一些功能性的缺失,但更像是有意为之(语言更加复杂) ● 还存在非常多可改进的空间 ● 会像 try proposal 一样被废弃吗?个人看法:形势还不够明朗(例如:社区反馈不够丰富),但被接受的概率很大 ● 会修改语法吗?个人看法:可能不会。 ● 什么时候会正式上线?个人看法:0 码力 | 41 页 | 770.62 KB | 1 年前3
使用Go与redis构建有趣的应用repl == 1 } 统计值为 1 的⼆二 进制位数量量 设置⼆二进制位 检查指定⼆二进制位的值 改进 虽然位图的体积仍然会随着⽤用户数量量的增多⽽而变⼤大,但因为记录每个⽤用户所需的内存数量量从原来的 平均 10 字节变成了了 1 位,所以实现⽅方法⼆二将节约⼤大量量内存。 改进 虽然位图的体积仍然会随着⽤用户数量量的增多⽽而变⼤大,但因为记录每个⽤用户所需的内存数量量从原来的 平均 位,所以实现⽅方法⼆二将节约⼤大量量内存。 储存⼀一天⽤用户在线信息所需的内存数量量: • ⼀一百万⼈人,125 KB ; • ⼀一千万⼈人, 1250 KB = 1.25 MB ; 改进 虽然位图的体积仍然会随着⽤用户数量量的增多⽽而变⼤大,但因为记录每个⽤用户所需的内存数量量从原来的 平均 10 字节变成了了 1 位,所以实现⽅方法⼆二将节约⼤大量量内存。 储存⼀一天⽤用户在线信息所需的内存数量量:0 码力 | 176 页 | 2.34 MB | 1 年前3
Go Web编程GOMAXPROCS(n) 告诉调度器同时使用多个线程。GOMAXPROCS 设置了同时运行逻辑代码的系统线 程的最大数量,并返回之前的设置。如果n < 1,不会改变当前设置。以后Go的新版本中调度得到改进后,这将被移 除。这里有一篇rob介绍的关于并发和并行的文章: http://concur.rspace.googlecode.com/hg/talk/concur.html#landing-slide GroupBy:用来指定进行groupby的字段 Having:用来指定having执行的时候的条件 进一步的发展 进一步的发展 目前beedb已经获得了很多来自国内外用户的反馈,我目前也正在考虑重构,接下来会在几个方面进行改进 实现interface设计,类似databse/sql/driver的设计,设计beedb的接口,然后去实现相应数据库的CRUD操 作 实现关联数据库设计,支持一对一,一对多,多对多的实现,示例代码如下: 请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外此请 求可以由任何可用服务器回答,这十分适合云计算之类的环境。因为是无状态的,所以客户端可以缓存数据以改进性 能。 另一个重要的REST原则是系统分层,这表示组件无法了解除了与它直接交互的层次以外的组件。通过将系统知识限制 在单个层,可以限制整个系统的复杂性,从而促进了底层的独立性。 下图即是REST的架构图:0 码力 | 295 页 | 5.91 MB | 1 年前3
Go 入门指南(The way to Go)语句,这将导致编译报错 function ends without a return statement (你可以认为这是一个编译器的 Bug 或者特性)。( 译者 注:该问题已经在 Go 1.1 中被修复或者说改进 ) 这里举一些有用的例子: 1. 判断一个字符串是否为空: if str == "" { ... } if len(str) == 0 {...} 2. 判断运行 Go 程序的操作系统类型,这可以通过常量 而 _ 无视了错误,程序会继续运行。 这样做是非常不好的:程序应该在最接近的位置检查所有相关的错误,至少需要暗示用户有错误发生并对 函数进行返回,甚至中断程序。 我们在第二个版本中对代码进行了改进: 示例 1: 示例 5.3 string_conversion2.go package main import ( "fmt" "strconv" ) func main() 可以通过 _ = ch <- v 来实现非阻塞发送,因为空标识符获取到了发送给 ch 的任何东西。在示例程序 Go入门指南 - 330 - 本文档使用 看云 构建 14.2 中使用这些可以改进为版本 goroutine3.go,输出相同。 实现非阻塞通道的读取,需要使用 select(参见第 14.4 节)。 示例 14.9-goroutine3.go: package main0 码力 | 380 页 | 2.97 MB | 1 年前3
2.4 Go 1.4 runtimeCollector 3. Goroutine Scheduler 1. Memory Allocator 内存分配器 base on tcmalloc. 基于成熟方案,性能优秀。随着版本升级, 针对性改进,以期与垃圾回收器更好协作。 核心:自主管理,缓存复用,无锁分配。 page, span. 内存管理以页为基本单位,多个地址连续 页构成内存块。 VA 8K 8K 8K 8K 8K span10 码力 | 29 页 | 608.57 KB | 1 年前3
1.每秒百万数据点 Go 应用监控系统演进ZSTD 压缩传输内容,降低磁盘性能要求 ● 根据可用物理内存限制对象的总量,避免 OOM ● 区分 fast path 和 slow path Gorilla 压缩算法 压缩算法优化 ● 改进 XOR,通过应用 10^X 乘数将 value 浮点值转换为整数值 ● 根据具体情况选择压缩算法 ○ 数值相同,那么只存储第一个值 ○ 数值是等差数列,那么只存存储第一个值和 Delta 值0 码力 | 42 页 | 2.32 MB | 1 年前3
共 18 条
- 1
- 2













