依赖总结下先有的获取对象依赖方式比较原始的New, 全局global保存基于反射读取对象的依赖, 程序启动时由DI库实例化(代表作dig等)基于反射读取对象的依赖, 编译前生成完整构建函数(代表作wire等)第一种:最方便, 直接快捷, 大量依赖时候, 但是因为是手动的, 容易出现实例顺序非预期, 不方便自动测试, mock等。第二种:因为是启动时反射获取依 ......
326
0
0
2022-06-21
使用go path问题代码开发必须在go path src目录下,不然,就有问题。依赖手动管理依赖包没有版本可言从这个看, go path不算包管理工具govendor解决了包依赖,一个配置文件就管理依赖包全都下载到项目vendor下,每个项目都把有一份。拉取项目时,开始怀疑人生。go mod介绍go modules 是 golang 1.11 新加的特性。 ......
441
0
0
2022-06-21
什么是defer?在Go中,一个函数调用可以跟在一个defer关键字后面,形成一个延迟函数调用。当一个函数调用被延迟后,它不会立即被执行。它将被推入由当前协程维护的一个延迟调用堆栈。 当一个函数调用(可能是也可能不是一个延迟调用)返回并进入它的退出阶段后,所有在此函数调用中已经被推入的延迟调用将被按照它们被推入堆栈的顺序逆序执行。 当所有这些延迟调用执行完毕 ......
451
0
0
2022-06-19
了解使用数组和切片在 Go 中存储数据的优缺点,以及为什么其中一个更好。在本系列的第四篇文章中,我将解释 Go 数组和切片,包括如何使用它们,以及为什么你通常要选择其中一个而不是另一个。数组数组是编程语言中最流行的数据结构之一,主要原因有两个:一是简单易懂,二是可以存储许多不同类型的数据。你可以声明一个名为 anArray&nb ......
439
0
0
2022-06-15
package main import ( "fmt" "sync" "time" ) //模拟一个耗时的任务 func job(worker int)int{ time.Sleep(time.Millisecond*500) return worker } func main(){ ......
374
0
0
2022-06-14
Goroutine一、并发并发编程表现为程序有若干个自主的活动单元组成,在今天的互联网中,一个web服务器可能一次处理上千个请求,而平板电脑和手机在渲染用户界面的同时,后端还同步进行着计算和处理网络请求等。在go语言中每一个并发执行的活动称之为goroutine,而在我们最常见的main函数中其实也是一个goroutine(主goroutine),在此之前, ......
456
0
0
2022-06-11
2.1 gRPC环境安装2.1.1 golang环境安装接下来的所有的教程以及代码都是golang代码进行演示,所以我们需要安装golang环境:下载地址:golang 官网安装完在你的命令行工具输入go version 就可以看到对应的下载版本然后就可以了。2.1.2 protoc 安装在 gRPC 开发中,我们常常需要与 Protobuf 进行打交道, ......
383
0
0
2022-06-10
仅用大约 65 行代码,开发一个用于生成随机数、支持并发的 TCP 服务端。TCP 和 UDP 服务端随处可见,它们基于 TCP/IP 协议栈,通过网络为客户端提供服务。在这篇文章中,我将介绍如何使用 Go 语言 开发一个用于返回随机数、支持并发的 TCP 服务端。对于每一个来自 TCP 客户端的连接,它都会启动一个新的 goroutin ......
519
0
0
2022-06-08
Go 的随机数生成器是生成难以猜测的密码的好方法。你可以使用 Go 编程语言 提供的随机数生成器来生成由 ASCII 字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但是你仍需要了解 Go 的基础知识,才能更好地理解它。如果你是对 Go 还不熟悉,请阅读 Go 语言之旅 来了解更多信息,然后返回此处。在介绍实 ......
380
0
0
2022-06-08
在选择负载均衡算法时,我们希望满足以下要求:具备分区和机房调度亲和性每次选择的节点尽量是负载最低的每次尽可能选择响应最快的节点无需人工干预故障节点当一个节点有故障时,负载均衡算法可以自动隔离该节点当故障节点恢复时,能够自动恢复对该节点的流量分发基于这些考虑,go-zero 选择了 p2c+EWMA 算法来实现。算法的核心思想p2cp2c (Pick Of 2 ......
394
0
0
2022-06-07
这是一個开源的前后端分离的IM网页应用。这是我学习golang写的第一个小的im聊天应用。对标的应用:im客服、语音客服。目前功能简洁、支持以下功能。简单的功能 支持账号、微博登录 单聊消息推送、群聊消息推送、图片发送、表情包、语音功能、敏感词过滤 rabbitmq同步离线消息 集群(不同节点之间使用rpc通讯投递消息) 桌面端应用+h5+pc网页界面展示桌 ......
452
0
0
2022-06-06
函数式编程一、介绍特点:在go语言中,函数是一等公民,可以作为参数,变量,返回值来使用高阶函数(在函数中定义函数,传入函数,返回函数)闭包附加:正统式函数式编程1.不可变性:不能有状态,只能有常量和函数2.函数只有一个参数对于正统式函数式编程(较为复杂,阅读性不高)我们不做太多介绍好下面我们看一个例子: func adder() func(v int) in ......
344
0
0
2022-06-04
引自ljq@GitHubstruct {}struct {}是一个无元素的结构体类型,通常在没有信息存储时使用。优点:不需要内存来存储struct{}类型的值。struct{}{}struct{}{}是一个复合字面量,它构造了一个struct{}类型的值,该值也是空。两个structt{}{}地址相等package main import "fmt" ......
381
0
0
2022-06-04
静态代码检查静态代码检查是一个老生常态的问题,它能很大程度上保证代码质量。Go 语言自带套件为我们提供了静态代码分析工具 vet,它能用于检查 go 项目中可以通过编译但仍可能存在错误的代码。静态代码检查是一个老生常态的问题,它能很大程度上保证代码质量。Go 语言自带套件为我们提供了静态代码分析工具 vet,它能用于检查 go 项目中可以通过编译但仍可能存在 ......
558
0
0
2022-06-03
前言开始讲netpoller之前先讲一下socket网络编程和epoll,不管go也好,nginx也好,只要是开启网络服务就绕不开socket,它是网络服务的基础。下一章网络编程先讲讲socket的基础函数。网络编程socket(购买电话机)int socket(int domain, int type, int protocol); socket函数对应 ......
627
0
0
2022-06-02