随笔分类 -  go

摘要:操作系统内存管理 操作系统管理内存的存储单元是页(page),在 linux 中一般是 4KB。而且,操作系统还会使用 虚拟内存 来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存。当访问或者修改内存的时候,操作系统会将虚拟内存映射到真实的内存中。申请内存的组件是 Page Ta 阅读全文
posted @ 2024-12-15 14:56 daemon365 阅读(129) 评论(0) 推荐(1) 编辑
摘要:本身涉及到的 go 代码 都是基于 go 1.23.0 版本 传统 OS 线程 线程是 CPU 的最小调度单位,CPU 通过不断切换线程来实现多任务的并发。这会引发一些问题(对于用户角度): 线程的创建和销毁等是昂贵的,因为要不断在用户空间和内核空间切换。 线程的调度是由操作系统负责的,用户无法控制 阅读全文
posted @ 2024-12-08 17:19 daemon365 阅读(156) 评论(0) 推荐(0) 编辑
摘要:为什么要做高可用 在生产环境中,kubernetes 集群中会多多个 master 节点,每个 master 节点上都会部署 kube-apiserver 服务,实现高可用。但是 client 访问 kube-apiserver 时,需要指定 ip 或者域名,这样会出现单点故障。官方推荐的做法是使用 阅读全文
posted @ 2024-12-07 14:18 daemon365 阅读(169) 评论(0) 推荐(1) 编辑
摘要:## net/http 路由注册 ```go func test1() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!") }) err := htt 阅读全文
posted @ 2023-06-28 20:47 daemon365 阅读(35) 评论(0) 推荐(0) 编辑
摘要:## 关于 Cobra 是 Go 的 CLI 框架。它包含一个用于创建功能强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。 Cobra 由 Go 项目成员和 hugo 作者 [spf13](https://github.com/spf13) 创建, 阅读全文
posted @ 2023-06-28 00:30 daemon365 阅读(753) 评论(0) 推荐(0) 编辑
摘要:## 责任链模式 **责任链模式**是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。比如 `kratos`,`gin`等开源库的中间件实现。 ### 代码实现 ```go package main import ( 阅读全文
posted @ 2023-06-26 23:27 daemon365 阅读(22) 评论(0) 推荐(0) 编辑
摘要:## 适配器模式 适配器模式用于转换一种接口适配另一种接口。比如,现在有个借口是对`json`字符串进行分析等,现在有一些`yaml`文件也要分析,这时候我我们就应该给`yaml`字符串就个适配器,转换成`json`字符串,然后就行分析。 ### 代码实现 ```go package main im 阅读全文
posted @ 2023-06-26 23:08 daemon365 阅读(19) 评论(0) 推荐(0) 编辑
摘要:## 单例模式 ### 为什么要用单例模式 **保证一个对象只有一个实例** ,减少内存开销。比如一些可以复用一个连接的网络,比如`http2 client`等,而且可以减少网络开销。 ### 为什么不用个全局变量控制 因为任何代码都有可能覆盖掉那些变量的内容, 从而引发程序崩溃。 ### 代码实现 阅读全文
posted @ 2022-06-04 17:43 daemon365 阅读(68) 评论(0) 推荐(0) 编辑
摘要:Gin框架介绍 基于httprouter开发的Web框架。 中文文档,齐全。 简单易用的轻量级框架。 Gin框架安装 go get -u github.com/gin-gonic/gin 实例: package main import ( "fmt" "github.com/gin-gonic/gi 阅读全文
posted @ 2021-08-19 17:25 daemon365 阅读(603) 评论(0) 推荐(1) 编辑
摘要:什么是soup 类似python中beatifulsoup,用于提取html标签提取,多用于爬虫。它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航,搜索以及修改剖析树的操作。利用它我们不在需要编写正则表达式就可以方便的实现网页信息的提取。soup是一个小型的网 阅读全文
posted @ 2021-08-19 17:22 daemon365 阅读(849) 评论(0) 推荐(0) 编辑
摘要:摘要 日志在整个工程实践中的重要性不言而喻,在选择日志组件的时候也有多方面的考量。详细、正确和及时的反馈是必不可少的,但是整个性能表现是否也是必要考虑的点呢?在长期的实践中发现有的日志组件对于计算资源的消耗十分巨大,这将导致整个服务成本的居高不下。此文从设计原理深度分析了 zap 的设计与实现上的权 阅读全文
posted @ 2021-08-19 17:20 daemon365 阅读(585) 评论(0) 推荐(0) 编辑
摘要:安装 go get github.com/spf13/viper viper支持的功能 1、可以设置默认值 2、可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件 3、应用程序运行过程中,保持监听和重新读取配置文件 4、可以从环境变量读取配置 5、可以从远程配置 阅读全文
posted @ 2021-08-19 17:13 daemon365 阅读(468) 评论(0) 推荐(0) 编辑
摘要:什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 JWT作用? JWT就是一种基于Token的轻量级认证模式,服务端认证通过后,会生成一个JSON对象,经过签名后得 阅读全文
posted @ 2021-08-19 17:12 daemon365 阅读(847) 评论(0) 推荐(0) 编辑
摘要:go module是 Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。 GO111MODULE 要启用go module支持首先要设置环境变量GO111MODULE,通过它可以开启或关闭模块支持,它有三个可选值:off、on、 阅读全文
posted @ 2021-08-19 16:56 daemon365 阅读(317) 评论(0) 推荐(0) 编辑
摘要:html模板生成: html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/template包。 模板语法 {{.}} 模板语法都包含在{{和}}中间,其中{{.}}中 阅读全文
posted @ 2021-08-19 16:55 daemon365 阅读(1296) 评论(0) 推荐(0) 编辑
摘要:go context标准库 context包在Go1.7版本时加入到标准库中。其设计目标是给Golang提供一个标准接口来给其他任务发送取消信号和传递数据。其具体作用为: 可以通过context发送取消信号。 可以指定截止时间(Deadline),context在截止时间到期后自动发送取消信号。 可 阅读全文
posted @ 2021-08-19 16:54 daemon365 阅读(175) 评论(0) 推荐(0) 编辑
摘要:http协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 关于http(https)协议: https://www. 阅读全文
posted @ 2021-08-19 16:50 daemon365 阅读(181) 评论(0) 推荐(0) 编辑
摘要:fmt fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。 向外输出 标准库fmt提供了以下几种输出相关函数。 Print Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符 阅读全文
posted @ 2021-08-19 14:36 daemon365 阅读(65) 评论(0) 推荐(0) 编辑
摘要:时间类型 time.Time类型表示时间。 func demo() { now := time.Now() //获取当前时间 fmt.Printf("Now:%v\n", now) // Now:2020-08-19 21:53:31.1633023 +0800 CST m=+0.003989401 阅读全文
posted @ 2021-08-19 14:36 daemon365 阅读(42) 评论(0) 推荐(0) 编辑
摘要:这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。 我要说明的是,这里对 map 的基本用法涉及比较少,我相信可以通过阅读其他入门书籍了解。本文的内容比较深入,但是由于我画了各种图,我相信很容易看懂。 什么是 阅读全文
posted @ 2021-08-19 14:24 daemon365 阅读(278) 评论(0) 推荐(0) 编辑