
Golang Learning
Golang Learning
MatsumotoChrikk
这个作者很懒,什么都没留下…
展开
-
Go-mall Frontend设计
tmpl(通常是模板文件 template 的缩写)是一种用于定义模板的文件格式。它主要包含了带有占位符或模板指令的文本内容,这些占位符和指令用于在运行时被具体的数据替换或者执行,从而生成最终完整的输出,如动态网页、配置文件等。比较重要的是biz和template和static(对于前端)有css js 和要用到的image。再看看static里面有什么。原创 2024-12-05 16:09:43 · 169 阅读 · 0 评论 -
Go热加载工具air-使用说明-win11问题解决指南
地址:https://github.com/air-verse/air。windows老是不是批处理什么什么的报错。弄下这两个 解决了 air -v看看。go版本>=1.23。原创 2024-12-04 11:09:12 · 341 阅读 · 0 评论 -
Go-protobuf consul注册备忘录
想要运行就可以 前提是port要改对 windows必须是现在的ip地址+8888端口才可以成功注册到consul。client在\demo\demo_proto\cmd\client里面 也是用go run .来运行。consul的地址是localhost:8500。demo/demo_proto是server。原创 2024-11-24 14:47:06 · 373 阅读 · 0 评论 -
Go-企业级网络层
租赁外网ip–将域名解析到外网ip上,绑定到物理机,发布公网route,用于外部用户访问。然后配置/etc/resolv.conf中nameservers为公共DNS。非对称加密:两个不同的密钥,公钥加密只有私钥能解密,私钥解密只能公钥能解密。对称加密:一份密钥(双方使用相同的)但是传输密钥的过程有可能被截获。自建DNS服务器就可以解决了,外部用户也看不到内网ip了。开源的DNS:bind nsd knot coredns。域名是需要购买的 还得购买二级域名。然后可以清空/etc/hosts了。原创 2024-11-22 17:19:55 · 233 阅读 · 0 评论 -
Go-RPC关键指标分析与企业实践
合并部署:微服务太微了,传输和序列化开销越来越大。易用性:开箱即用 周边工具 支持protobuf和thrift 生成服务代码脚手架。扩展性:Middleware-option-编解码层-协议层-网络传输层-插件扩展。交互方式:ping-pong/streaming/oneway。观测性:Log Metric Tracing 内置观测性服务。2.稳定性-请求成功率(用重复发送 负载均衡)编解码:thrift/protobuf。3.稳定性-长尾请求(用备份请求)调度优化:重用goroutine。原创 2024-11-19 16:16:57 · 457 阅读 · 0 评论 -
Go-RPC框架分层设计
了 不同的服务可以用不同的语言进行开发 比如视频-直播-商城-通知-支付等等。而现在谈的Thrift用的编码是TLV编码 tag-length-value。3.编解码:也叫序列化与反序列化 从内存中表示–>字节序列 这就是一次编码。(映射到正确的函数 要付款而不是退款 每个函数得有自己的ID 才能找到)文件 然后生成不同语言的CodeGen(Golang C++ Java)在这个编解码层:有数据格式:语言特定的格式-文本格式-二进制编码。2.生成代码:通过编译器工具把IDL文件转换为语言对应的静态库。原创 2024-11-15 16:03:27 · 559 阅读 · 0 评论 -
IDL脚手架遇到的cwgo问题
注意windows要把下载后的东西添加到环境变量。原创 2024-11-14 21:04:28 · 341 阅读 · 0 评论 -
Go-一文打尽基础语法实例
解释range:for循环中迭代array slice channel map的用的东西。切片类似于array,也可以用下标访问。17-JSON 有序列化与反序列化。当然,容量可以不传,默认和长度相等。原创 2024-11-11 20:24:30 · 300 阅读 · 0 评论 -
Go-性能优化、自动内存管理
也可以引用计数:大于零就存活(这个就是内存管理和程序执行中了)类似于C++的智能指针。缺点是:原子操作开销大,循环引用,内存开销。在CVE漏洞平台上能看到 double-free 和use-after-free是很多的。可以解决:double-free use-after-free问题。追踪垃圾回收:标记根对象-找到可达对象-清理不可达对象。Collector:GC线程,找到存活的,回收死亡的。Mutator:业务线程,分配新对象。管理的是动态内存:malloc()安全性:不能回收存活的对象。原创 2024-11-08 15:28:29 · 367 阅读 · 0 评论 -
Go-HTTP框架设计实现概述
1.再谈HTTP协议第一个大规模使用:HTTP0.9 三十多年了HTTP:超文本传输协议(Hypertext Transfer Protocal)为什么是超文本:因为图片、音乐、视频是文本的扩充为什么需要协议:约定俗称的规则(像说话)有边界协议里有什么:1.请求行/状态行方法名 URL 协议版本/////////协议版本 状态码 状态码描述1xx:信息类2xx:成功3xx:重定向4xx:客户端错误5xx:服务端错误2.请求头/响应头3.请求体/响应体DEMO:packa原创 2024-11-08 11:43:21 · 650 阅读 · 0 评论 -
Go-性能调优实战案例
AB实验SDK优化 分析基础库的核心逻辑和性能瓶颈 压测验证 落地验证。单独的benchmark无法满足复杂逻辑分析 压测(单机器 集群)并且问题还有:cpu占用80%和40%的数据是不一样的 都采样一下。采样的是block的次数和耗时 阻塞得超过阈值才被记录。编译器 运行时优化 优化内存分配策略 也是压测-落地。采样的是争抢锁的次数和耗时 只记录固定比例的锁操作。通过内存分配器在堆上分配和释放的内存。看占用比较长的-定位代码-找到问题。记录程序创建的所有系统线程的信息。采样的是函数调用和占用的时间。原创 2024-11-07 10:28:12 · 354 阅读 · 0 评论 -
Go-性能优化、优化分析、调优实战pprof
使用官方自带benchmark进行基准性能测试第一个是函数名-核数 第二个是执行次数 第三个是一次执行时间第四个是一次执行的多大的内存 第五个是一次执行申请几次内存slice用的时候在make()初始化切片时提供容量信息slice:Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。在已有切片基础上创建切片,不会创建新的底层数组。原创 2024-11-07 09:38:41 · 802 阅读 · 0 评论 -
Go-高质量编程及编码规范
error尽可能提供简明的上下文信息链,方便定位问题。panic用于真正异常的情况。recover生效范围,在当前的goroutine的被defer的函数中生效。函数名不要携带上下文信息 serve就可以 不用serveHTTP 因为包名和函数名会成对出现的。包只用小写字母,不要下划线,不要变量名。:优先处理错误情况/特殊情况。gofmt(官方提供的自动格式化)解释作用、如何做、原因。原创 2024-11-06 15:38:15 · 228 阅读 · 0 评论 -
Go项目布局
internal目录下放不希望外部访问的代码(业务)Go项目布局,自举语言,源码是靠Go自己实现的。所以Go源码可以参考作为项目布局。common目录下可以放直接。etc放配置文件yaml。import外部访问的。源码放在src目录下。原创 2024-08-19 16:38:22 · 165 阅读 · 0 评论 -
GoModule
所以:如果某一天mux包发布了v2.0.0版本,那么这时候主版本就是2,已经与v1.8.1和v1.7.1的主版本号不同了,那么v2.0.0与v1.8.1和v1.7.1就是不兼容的包版本。在项目开发中,如果升级了某个包的版本且新版本的包存在一些问题,比如对服务的整体性能产生了影响,我们可以手动的将它降级为之前发布的某个兼容版本。但是go get就可以下载依赖包,但是此时下载是最新的,如果后续更新引入了不兼容代码,那么将会无法编译成功。其实,在Go Module模式下,语义版本号主要由三部分组成,原创 2024-08-19 16:27:00 · 721 阅读 · 1 评论 -
Go第一个程序
并不是,因为程序启动要初始化,初始化内存,初始化栈,初始化调度器,这些都是go汇编完成的,而main函数是go的第一个执行的goroutine。可以提升代码的灵活性,重构也更容易,维护也没有负担。而且在编译期完成,不会对运行效率产生任何影响。上述很简单,如何使用os包获取命令行参数呢?:=只能在局部作用域内,而不能在全局,全局用。不用显示定义str类型,直接用:=即可。main包一个go程序只允许有一个。Go的程序执行入口是main函数吗?go程序可以任意导入包。go的类型推断的好处?就用小写单词命名的。原创 2024-08-19 15:30:38 · 297 阅读 · 0 评论 -
Go环境搭建-开发工具
官方下载地址:https://go.dev/dl/windows会自动设置环境变量,直接使用即可。截至2024.8.19,现有的版本是1.23。GOPRIVATE 安全校验,公司内部有用。GOMODCACHE 存储下载的包路径。1.11版本开始支持module。1.16版本默认开启module。GO111MODULE 构建模式。GOPROXY 配置代理。GOPATH 老构建模式。1.18版本支持泛型。原创 2024-08-19 15:09:59 · 237 阅读 · 0 评论