5.cgo 原理解析及优化实践cgo 原理解析及优化实践 朱德江 蚂蚁集团 MOSN 核心成员 Golang contributor Envoy Golang extension maintainer 公众号 • 开源爱好者 • 十余年网关研发 • OpenResty 老司机(NGINX + LuaJIT) • MOSN 核心成员 • Envoy Golang extension maintainer •0 码力 | 45 页 | 5.74 MB | 1 年前3
Go Web编程ks节,包含“目录”,“上一节”和“下一 节”的链接。 代码 代码 代码要go fmt后提交。注释文件注明其所属章节。 如何编译 如何编译 build.go依赖markdown的一个解析包,所以第一步先 go get github.com/russross/blackfriday 这样读者就可以把相应的Markdown文件编译成html文件,执行go build build 4.表单 4.1 处理表单的输入 4.2 验证表单的输入 4.3 预防跨站脚本 4.4 防止多次递交表单 4.5 处理文件上传 4.6 小结 5.访问数据库 5.1 database/sql接口 5.2 使用MySQL数据库 5.3 使用SQLite数据库 5.4 使用PostgreSQL数据库 5.5 使用beedb库进行ORM开发 5.6 NOSQL数据库操作 5.7 小结 6.session和数据存储 Socket编程 8.2 WebSocket 8.3 REST 8.4 RPC 8.5 小结 9.安全与加密 9.1 预防CSRF攻击 9.2 确保输入过滤 9.3 避免XSS攻击 9.4 避免SQL注入 9.5 存储密码 9.6 加密和解密数据 9.7 小结 10.国际化和本地化 10.1 设置默认地区 10.2 本地化资源 10.3 国际化站点 4 10.4 小结 11.错误处理,调试和测试0 码力 | 295 页 | 5.91 MB | 1 年前3
Go Context原理及其典型适用场景") } } } Context源码解析 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } Context源码解析 var ( background = func Background() Context { return background } func TODO() Context { return todo } Context源码解析 type emptyCtx int func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { return } func (*emptyCtx) interface{} { if c.key == key { return c.val } return c.Context.Value(key) } 标准库使用 net/http database/sql os/exec 日志跟踪 l 触发点生成TraceId l 通过context.WithValue保存TraceId l 然后Context作为参数在多个groutine或者其他函数间 传递0 码力 | 32 页 | 4.62 MB | 1 年前3
4 seata-golang 分布式事务框架mysqlStmt 对象,在 mysqlStmt 执⾏ Exec(args []driver.Value) (driver.Result, error) ⽅法时,会拦截执⾏的 sql 语句,解析 sql 语句后,获得 sql 语句执⾏的前后镜像构造成 undoLog 填充到 connCtx 的 sqlUndoItemsBuffer 中。 { "branchId": 641789253,0 码力 | 14 页 | 3.23 MB | 1 年前3
2.7 Golang与高性能DSP竞价系统复杂的出价算法与逻辑 DSP竞价系统的挑战 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 竞价请求解析(JSON 或 Google Protobuf) • 根据⼲⼴广告位属性过滤活动 • 根据客户端信息过滤活动(浏览器、操作系统类型等) • 根据地区过滤活动 • 查询Cookie M Right ReservedAll Right Reserved 曝光统计服务 HTTP接⼝口, Go服务 ⽇日志 队列 Transfer, 计算并⽣生成SQL SQL 队列 MysQL 实时库 读取SQL 写⼊入MysQL InfoBright 历史库 隔天导⼊入 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Golang重写原来PHP的Transfer 专业DSP解决⽅方案 © ⼲⼴广州舜⻜飞信息科技有限公司 All Right ReservedAll Right Reserved • 写⼊入做⼀一些合并,减少写⼊入的SQL数量 • MySQL库只保留最近7天的数据 • MySQL使⽤用MyISAM引擎 • MySQL做分库、分表后还可以应付 • InfoBright是列存储 • InfoBright压缩率奇⾼高0 码力 | 51 页 | 5.09 MB | 1 年前3
Go vs. GoPlus(Go+)PHP (1994) • JavaScript (1995) • Ruby (1995) 脚本语言是集中性大爆发的 大概也就是在 Java 出现的那个年代 数据科学语言发展史 (TOP50) • SQL (1973) • SAS (1976) • MATLAB (1984) • Python (1991) • R (2000) • Julia (2009) • Go+ (2020) 数据科学的发展古老而漫长 脚本语言是特定历史阶段下的产物,长远看静态语言更有生命力 • 数据科学是计算机的最初需求,历史悠久但进步缓慢 -因为数据大爆发的时代一直没有到来 02 数据科学的发展 数据科学的原始时期:数学软件时代 • SQL (1973) • SAS (1976) • MATLAB (1984) • Excel (1985) • Limited Domains (有限领域) ,比如 BI (Business Intelligence) 当前 Go+ 已经拥有 3 个种子用户(13-14岁) • 有理数 • Map • Slice • List comprehension • For range 双引擎:既可静态编译,也可解析执行 • 既支持静态编译为可执行文件来执行,也支持编译成字节码方式 进行解释执行 • 数据科学家喜欢单步执行(为什么?这并不是因为懒) -请回忆一下所有数学软件的 UI • 但最终交付仍然需要最大化的执行效率!0 码力 | 54 页 | 1.82 MB | 1 年前3
1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台telegraf 监控 ⽇志 HPA Operator 注册中⼼ 配置中⼼ API ⽹关 微服务拓扑 全链路追踪 错误分析 ⽇志分析 主动监控 浏览器监控 APP 监控 慢SQL JVM 诊断 ⾃定义告警 APM 微服务管理 资源管理 标签管理 系统监控 集群管理 服务⽬录 埋点 数据库 ⽇志 画像 标签 报表 推荐 … 代码管理 持续集成 编排部署 模块需要主动在config.yml中声明 案例:通过 IoC 注册服务 以 mysql client 为例 案例:通过 IoC 获取依赖 使⽤ autowired ⾃动注⼊依赖 使⽤服务定位器解析依赖 // +publish prefix:"/api/greeter" backend-prefix:"/api" service:"user-center" service GreeterService0 码力 | 40 页 | 8.60 MB | 1 年前3
Go 入门指南(The way to Go)2.4 指导设计原则 Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也 能够提高程序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。 这些方面的工作都是为了减少编码的工作量,甚至可以与 Java 的简化程度相比较。 Go 语言有一种极简抽象艺术家的感觉,因为它只提供了一到两种方法来解决某个问题,这使得开发者们 的代码都非 节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮 助。 LALR 是 Go 语言的语法标准,你也可以在 src/cmd/internal/gc/go.y 中查看到,这种语法标准在编译 时不需要符号表来协助解析。 1.2.5 语言的特性 Go 语言从本质上(程序和结构方面)来实现并发编程。 Go入门指南 - 9 - 本文档使用 看云 构建 因为 Go 语言没有类和继承的概念,所以它和 Java 或 发生错误时进入恐慌(panic)状态 -o 指定输出文件名 // 详见第3.4节 -S 打印产生的汇编代码 -V 打印编译器版本 // 详见第2.3节 -u 禁止使用 unsafe 包中的代码 -w 打印归类后的语法解析树 -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)节),从而能够将过去开发的软件进行快速迁移。 Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。干净、整齐和简洁的语法也能够提高程 序的编译速度,因为这些关键字在编译过程中少到甚至不需要符号表来协助解析。 这些方面的工作都是为了减少编码的工作量,甚至可以与 Java 的简化程度相比较。 1.2.4 指导设计原则 1.2 语言的主要特性与发展的环境和影响因素 - 20 - 本文档使用 书栈(BookStack 节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮助。 LALR 是 Go 语言的语法标准,你也可以在 src/cmd/internal/gc/go.y 中查看到,这种语法标准在编译时不需要符 号表来协助解析。 Go 语言从本质上(程序和结构方面)来实现并发编程。 因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的 概念来实现多态性。Go // 详见第3.4节 8. -S 打印产生的汇编代码 9. -V 打印编译器版本 // 详见第2.3节 10. -u 禁止使用 unsafe 包中的代码 11. -w 打印归类后的语法解析树 12. -x 打印 lex tokens 从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install0 码力 | 466 页 | 4.44 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a及 定义类型和类型别名将被统称为代码要素。 代码要素名必须为标识符 (identifier)(第5章)。 高级编程语言代码将被编译器或者解释器转换为底层机器码进行执行。 为了 帮助编译器和解释器解析高级语言代码,一些单词将被用做关键字 (keyword)。 这些单词不能被当做标识符使用。 很多现代高级语言使用包(package)来组织代码。 一个包必须引入 (import)另一个包才能使用另一个包中的公有(导出的)代码要素。 101”或者访问github.com/golang101/golang101 ? 获取本书最新版) 关键字和标识符 此篇文章将介绍Go中的关键字和标识符。 关键字 关键字是一些特殊的用来帮助编译器理解和解析源代码的单词。 截至目前(Go 1.21),Go中共有25个关键字。 1| break default func interface select 2| case 下面这样的接口类型,则database/sql ? 标准库包中声明的DB和Tx类型都实 现了这个接口类型,因为它们都拥有此接口类型指定的三个方法。 1| import "database/sql" 2| 3| ... 4| 5| type DatabaseStorer interface { 6| Exec(query string, args ...interface{}) (sql.Result, error)0 码力 | 821 页 | 956.82 KB | 1 年前3
共 50 条
- 1
- 2
- 3
- 4
- 5













