获得徽章 1
#挑战每日一条沸点# 负载均衡的三种解决方案:集中式LB(Proxy Model)、进程内LB(Balancing-aware Client)和独立LB进程(External Load Balancing Service)。这些方案用于构建高可用、高性能的通信服务,包括服务注册与发现、负载均衡和容错处理机制。

gRPC的准备:介绍了gRPC框架默认使用Google开源的protocol buffers作为结构数据序列化机制,提供了客户端和服务器端的接口,适用于移动端(iOS/Android)到服务器端的通讯解决方案。同时提供了安装golang protobuf的步骤。

简单的protobuf使用:展示了一个简单的protobuf文件示例,并说明如何通过protoc工具生成不同语言的.pb.go文件,以及介绍了四种不同的RPC方式,包括简单RPC、服务器端流式RPC、客户端流式RPC和双向流式RPC。
展开
评论
#挑战每日一条沸点#
单元测试在 Golang 开发中扮演着重要的角色。项目结构应该包含对应的源文件和测试用例文件。测试用例文件名应该以 _test.go 结尾。使用 go test 命令可以自动生成并执行测试用的可执行文件。性能测试系统还能提供代码性能数据,帮助测试者分析性能问题。测试函数用于测试 Add 函数的功能。运行 go test 命令可执行该测试用例,并显示测试结果。

go test 命令的常用参数包括:

-bench regexp:执行相应的性能测试。
-cover:查看代码覆盖率。
-run regexp:只运行匹配的测试函数。
-v:显示测试的详细信息。
通过这些简单的示例和命令参数,我们可以轻松编写和执行 Golang 单元测试,确保代码的正确性和性能。
展开
评论
#挑战每日一条沸点#
Go语言在版本1.11和1.12中引入了对包管理的初步支持,通过新的依赖管理系统(Go Modules),解决了旧版本中包管理的一些问题。

在旧版本中,Go的包管理相对有限。开发者需要手动下载依赖包,并且第三方包没有明确的版本概念,因此无法精确控制依赖的版本。在协作开发中,还需要统一各个开发成员本地$GOPATH/src下的依赖包,同时处理包的转移和替换问题,导致项目结构混乱。

新的包管理模式解决了这些问题。它通过自动下载依赖包,使得手动下载的步骤变得简单。开发者无需放置项目在$GOPATH/src下,可以在任意位置创建项目。项目内部会生成一个go.mod文件,列出项目的包依赖,并明确指定依赖的版本。这样可以确保不同开发环境下使用相同的依赖版本,避免不兼容版本导致的问题。

使用新的包管理模式,可以准确指定依赖包的版本号。开发者可以在go.mod文件中通过require关键字指定包和版本,或者使用latest表示自动下载指定包的最新版本。依赖包的版本号是由其发布者标记的,可以在代码仓库的发布页面查看版本历史。

对于包地址失效的情况,例如golang.org/x/...下的包无法下载,新的包管理模式提供了一种简单的解决方案。可以在go.mod文件中使用replace关键字替换包的地址,将旧的包地址替换为可用的新地址,让Go自动下载替代地址的最新版本。

对于老项目如何使用新的包管理,可以将项目移动到$GOPATH/src之外,然后运行go mod init命令初始化模块。这样就可以开始使用新的包管理模式,并进行构建和运行。
展开
评论
#挑战每日一条沸点#
1. 零值 (Zero Value):
在 Go 中,如果你声明了一个变量但没有显式地给它赋值,它将会被初始化为其对应类型的"零值"。零值是一种默认值,每种数据类型都有自己的零值。以下是一些常见类型的零值示例:
- 数值类型(int、float等):0
- 布尔类型(bool):false
- 字符串类型(string):""
- 指针类型:nil
- 结构体类型:其成员变量的零值

例如,如果你声明了一个整数变量:`var num int`,它将自动初始化为0,因为0 是 int 类型的零值。

2. 空值 (nil):
在 Go 中,有些类型具有特殊的值,被称为 "nil"。Nil 是一种无效或未设置的值,通常用于表示某些数据类型的缺失或未初始化状态。以下是一些可以是 nil 的类型:
- 指针类型
- 切片类型
- 映射类型
- 通道类型
- 函数类型
- 接口类型

例如,当你声明一个指针变量但未分配指向任何值的内存时,它的值将是 nil。

3. 空结构 (Empty Struct):
在 Go 中,有一种特殊的结构体类型,被称为空结构体或匿名结构体。它没有任何字段,形式上是一个空的结构体类型,定义如下:

```go
type EmptyStruct struct{}
```

空结构体在某些情况下用于占据内存空间,特别是在通道中充当信号或同步的角色。因为空结构体没有字段,每个空结构体的实例都是0字节的,不占用内存空间。
展开
评论
#挑战每日一条沸点#
原生Web框架:开始时,使用原生的Go语言来构建一个简单的Web服务器。这涉及创建一个HTTP服务器,处理基本的请求和响应,但缺乏高级功能和路由处理。

改进路由系统:接着,对原生Web框架进行改进,实现一个简单的路由系统,使得不同的URL可以映射到不同的处理函数。

引入Gin框架:为了更高效地进行Web开发,引入Gin框架,它是一个流行的Go Web框架,提供了更多的功能和性能优化。

项目依赖引入:使用Go的包管理工具(如go mod)引入Gin框架作为项目的依赖。

创建路由引擎:在Gin中,首先需要创建一个路由引擎,以便定义和处理不同的HTTP路由。

Gin中间件:Gin支持中间件,可以在请求到达路由处理函数之前或之后执行一些操作。这些中间件可以用于身份验证、日志记录等功能。

Gin默认中间件:Gin内置了两个默认的中间件,用于日志记录和恢复(处理Panic)。

Gin路由配置:对Gin路由进行配置,指定URL路径和相应的处理函数。

路由记录方法:介绍如何在Gin中记录和处理不同HTTP方法(GET、POST等)的路由。

Gin启动:使用Gin启动Web服务器,监听指定的端口,使得应用能够对外提供服务。

参数解析和绑定:解析HTTP请求中的参数,并将它们绑定到处理函数中,方便处理和使用。

这个入门指南涵盖了从原生Web框架到使用Gin框架升级的过程,引入依赖、路由配置、中间件的使用,以及参数解析和绑定。
展开
评论
#挑战每日一条沸点#
fasthttp (替代 net/http)

GitHub 地址:github.com/valyala/fasthttp
它号称比官方库 net/http 快十倍,优化核心思路包括资源复用、复用 goroutine 减轻 runtime 调度压力,以及对象复用减轻 GC 压力。
使用 fasthttp 的知名项目有 Fiber、Gearbox、atreugo 等。
jsoniter (替代 encoding/json)

GitHub 地址:github.com/json-iterator/go
jsoniter 是一款快速灵活的 JSON 解析器,比标准库 encoding/json 快 6 倍之多,同时与标准库兼容。
它可以通过 jsoniter.ConfigCompatibleWithStandardLibrary 进行使用。
gogo/protobuf (替代 golang/protobuf)

GitHub 地址:github.com/gogo/protobuf
gogo/protobuf 是官方库 golang/protobuf 的增强版实现,比官方库更快地序列化与反序列化,提供更规范的 Go 结构,并兼容 golang/protobuf。
valyala/quicktemplate (替代 html/template)

GitHub 地址:github.com/valyala/quicktemplate
quicktemplate 是一个快速、强大且易于使用的 Go 模板渲染引擎,比标准库 html/template 快 20 倍以上,几乎没有学习成本,可以嵌入任意 Go 代码。
展开
评论
namesilo买域名用支付宝付款
有问题 钱被吞了😤 辣鸡回调
联系客服等解决
评论
electron必须要webhashhistory是为什么
评论
问题是什么——我们打算怎么解决(技术路线含创新)——为什么这么解决好——解决了怎么算是好(评价标准)
评论
😊bing娘可爱捏
若月千鸮于2023-03-31 11:40发布的图片
评论
#挑战每日一条沸点# 速通一下electron😋玩玩桌面端
评论
#青训营笔记创作活动#
2月15日 打卡day33
一个登录案例包学会 Pinia
先注册好 pinia 插件,然后定义需要管理的数据(状态)和方法(登录逻辑),然后在组件中初始化 store,并使用数据,调用方法,演示了使用 Pinia 的基本流程,最后还介绍了一个持久化插件,帮助持久化 Pinia 中的状态。
展开
评论
#青训营笔记创作活动#
2月14日 打卡day32
前端实现docx、pdf格式文件在线预览
在业务中,如果遇到文档管理类的功能,会出现需要在线预览的业务需求,本文主要是通过第三方库来实现文档预览功能,并将其封装成preview组件
展开
评论
#青训营笔记创作活动#
2月13日 打卡day31
前端工程化基石 -- AST(抽象语法树)以及AST的广泛应用🔥
这一篇文章先从AST的设计理念出发,逐步引申出编译器的工作原理,为了让大家更加深入的了解AST,使用差不多180行代码手写了一个简易编译器。
很多代码 很难懂 但是很厉害
展开
评论
#青训营笔记创作活动#
2月12日 打卡day30
Qiankun原理——JS沙箱是怎么做隔离的
改变 this 和 window 的值,让它们指向 window.proxy 沙箱对象,最后再用 eval 来执行这个函数。
还是比较困难的,有一些东西很难隔离
展开
评论
下一页
个人成就
文章被点赞 15
文章被阅读 14,114
掘力值 397
收藏集
0
关注标签
21
加入于