golang
文章平均质量分 60
golang技术
小张同学该努力了
这个作者很懒,什么都没留下…
展开
-
goland常用快捷键
控制光标的移动:fn+上下左右移至当前页的页头:ctrl+PgUp移至并选中光标到当前页头:ctrl+shift+PgUp移至当前页的页尾:ctrl+PgDn移至并选中当前光标到当前页尾:ctrl+shift+PgDn返回到当前的光标处:ctrl+m跳转到页首:ctrl+home跳转到页尾:ctrl+end。原创 2023-10-29 20:33:52 · 1110 阅读 · 2 评论 -
golang入门笔记——pprof性能分析
golang性能分析工具pprof的8个指标1.性能分析的5个方面:CPU、内存、I/O、goroutine(协程使用情况和泄漏检查)、死锁检测以及数据竟态分析2.两种程序性能指标采集pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各个函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。3.交互式终端性能分析。原创 2023-09-18 16:39:57 · 524 阅读 · 0 评论 -
golang入门笔记——viper
BindEnv使用一个或者两个参数:第一个参数是键名称,第二个参数是环境变量名。Viper是golang的一个管理配置文件的工具,它支持JSON、TOML、YAML、HCL、envfile、Java properties。SetEnvPrefix:用于不知道环境变量名时,viper自动查找的时候加的前缀名,BindEnv和AutomaticEnv都将使用这个前缀。需要重新启动服务器以使配置生效的日子已经一去不复返了,viper驱动的应用程序可以在运行时读取配置文件的更新,而不会错过任何消息。原创 2023-09-18 09:59:56 · 1281 阅读 · 0 评论 -
golang入门笔记——nginx
Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,Nginx专为性能优化而开发,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。正向代理:通过代理服务器访问目标服务器,我们知道目标服务器的链接,但无法直接访问目标服务器,必须通过代理的方式访问。反向代理:一个请求访问目标服务器时,请求先到达代理服务器,由代理服务器转发给目标服务器,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。原创 2023-08-31 22:18:36 · 1555 阅读 · 0 评论 -
Redis
redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样。原创 2022-07-21 16:25:06 · 335 阅读 · 0 评论 -
golang入门项目——打卡抽奖系统
用户加入群组之后,会在签到群组所设的签到地点进行签到和签退,并限制同一个设备只能签到一个用户,签到成功之后。会获取一定的限制在该群组使用的积分。该群组可以设置一些抽奖活动,用户可使用该群组内的积分来进行该群组的抽奖活动。原创 2023-04-19 10:38:29 · 1404 阅读 · 1 评论 -
golang入门笔记——logrus
下载依赖。原创 2023-04-09 13:53:01 · 206 阅读 · 0 评论 -
Redis高级篇
redis单线程时代性能依然很快的原因?1.基于内存操作:Redis的所有数据都存在内存中,因此所有的运算都是内存级别的,所以它的性能比较高2.数据结构简单:Redis的数据结构是专门设计的,而这些简单的数据结构的查找和操作的时间大部分复杂度都是O(1),因此性能比较高3.多路复用和非阻塞I/O:Redis使用I/O多路复用功能来监听多个socket连接客户端,这样就可以用一个线程连接来处理多个请求,减少线程切换所带来的开销,同时也避免了I/O阻塞操作4.避免上下文切换:因为是单线程模型,因此就避免原创 2023-03-18 15:40:47 · 2778 阅读 · 1 评论 -
leetcode(中等)
【代码】leetcode(中等)原创 2023-03-11 23:24:52 · 427 阅读 · 0 评论 -
RPC框架笔记
1.本地函数调用和RPC调用的区别:函数映射、数据转成字节流、网络传输2.RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server3.一次RPC的完整过程4.RPC带来好处的同时也带来了不少的问题,将由RPC框架来解决。原创 2023-03-04 14:12:43 · 474 阅读 · 0 评论 -
golang入门笔记——测试
1.所有测试文件以_test.go结尾3.初始化逻辑放到TestMain中。原创 2023-02-23 10:44:08 · 839 阅读 · 0 评论 -
golang入门笔记——内存管理和编译器优化
静态分析:不执行程序代码,推导程序的行为,分析程序的性质控制流(control flow):程序的执行流程数据流(data flow):数据在控制流上的传递通过分析控制流和数据流,我们可以知道更多关于程序的性质根据这些性质优化代码。原创 2023-02-19 21:38:23 · 559 阅读 · 0 评论 -
golang入门笔记——内存管理
1.动态内存2.自动内存管理(垃圾回收):由程序语言的运行时系统回收动态内存3.三个任务。原创 2023-02-19 17:22:57 · 514 阅读 · 0 评论 -
golang入门笔记——Hertz
Hertz是字节跳动研发的企业级微服务HTTP框架,具有高易用性、易扩展、低时延等特点。是基于自研网络库Netpoll开发的内部框架Hertz。Hertz框架整体上满足:1.极致性能优化的问题性2.面对未来不可控需求的扩展能力,Hertz采用了4层分层设计(应用层、路由层、协议层、传输层),保证各个层级功能内聚,同时通过层级之间的接口达到灵活扩展的目标。原创 2023-01-20 21:47:26 · 3319 阅读 · 4 评论 -
golang入门笔记——kitex
由于Kitex并不支持Linux,所以需要首先安装WSL2WSL一句话来说就是微软出的一个虚拟机工具Win11下安装WSL2的步骤为:1.“开始菜单”搜索功能,打开“启动或关闭Window功能”2.勾选以下功能1.适用于Linux的Window子系统2.虚拟机平台3.微软商店搜索wsl,点击安装4.安装完打开,安装完之后输入用户的账号密码如果安装过程中出现下面这种情况:说明内核没有更新,需要更新打开一个终端输入以下命令:wsl -l -vwsl。原创 2023-01-18 22:55:22 · 2037 阅读 · 0 评论 -
golang高并发微服务项目——大转盘抽奖系统
gin+vue+redis+rabbitmq原创 2022-10-18 12:20:13 · 690 阅读 · 2 评论 -
golang入门项目——微商城
micro微服务项目:微商城,源码链接:https://github.com/zzssdd/shop原创 2022-09-28 12:08:44 · 778 阅读 · 0 评论 -
RabbitMQ
RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)(高级消息队列协议),是一个网络协议,是应用层协议的一个开发标准,为面向消息的中间件设计。RabbitMQ基础架构图如下图:Broker:接收和分发消息的应用,RabbitMQ Server就是Message BrokerVirtual host:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。原创 2022-09-12 11:29:38 · 885 阅读 · 0 评论 -
golang入门笔记——consul
github相关包:服务发现也是一个服务有服务发现后,client、server工作流程:1.每个server启动时,都将自己的IP、port和服务名 注册给“服务发现”2.当client向服务发现发起服务请求时,“服务发现”会自动找一个可用的服务,将其IP/port/服务名返回给client3.client借助服务发现发现服务,访问server服务发现的种类:consul:常应用于go-micro中mdns:go-micro中默认自带的服务发现etcd:k8s内嵌的服务发现zookeeke原创 2022-09-05 19:11:04 · 1393 阅读 · 0 评论 -
golang入门笔记——gRPC
实例://指定的当前proto语法的版本,有2和3 syntax = "proto3";path 表示生成的go文件的存放地址,会自动生成目录的name表示生成的go文件所属包名//指定等会文件生成出来的package//消息传输的对象}product.go//实现具体的业务逻辑 stock := p . GetStockById(request . ProdId) return & main . ProductResponse {service.go= nil {原创 2022-09-04 22:59:59 · 1360 阅读 · 0 评论 -
vue+gin前后端分离博客系统
源码地址:https://github.com/zzssdd/myblog原创 2022-08-26 16:40:33 · 1173 阅读 · 0 评论 -
Git笔记
分支切换是让head直接指向切换到的分支。拉取: git pull 别名 分支。原创 2022-08-20 11:08:37 · 194 阅读 · 0 评论 -
leetcode(简单)
解法1:解法2:回文数解法1:解法2:罗马数字转整数最长公共前缀解法1:分治解法2:纵向扫描解法3:横向扫描有效的括号合并两个有序链表删除有序数组中的重复项移除元素实现strStr解法1:暴力解法2:KMP搜索插入位置最大数组和解法1:贪心解法2:分治最后一个单词长度加一二进制求和x的平方根解法1:直接调库解法2:袖珍计算器算法解法3:二分法爬楼梯解法1:非递归解法2:非递归解法3:矩阵快速幂删除排序链表中的重复元素合并两原创 2022-07-31 00:28:29 · 2227 阅读 · 2 评论 -
golang入门笔记——排序
我们给定一个排序规则安装第index列大小进行排序,当第index列出现值相等时,参照index+1列。原创 2022-07-29 10:22:27 · 409 阅读 · 0 评论 -
Docker
服务相关命令镜像相关命令容器相关命令。原创 2022-07-22 19:47:27 · 630 阅读 · 0 评论 -
golang入门笔记——jwt
jwt全称(JSON WEB TOKEN),是一种后台不做存储的前端身份验证的工具。分为三部分:Header、Claims、Signature原创 2022-06-11 12:08:12 · 771 阅读 · 0 评论 -
golang入门笔记—Gorm
Gorm是go语言编写的一个ORM框架,是中国人开发的框架(自豪)偷懒不写sql语句数据库操作神器ORM的优缺点:优点:提高开发效率缺点:牺牲执行功能牺牲灵活性弱化SQL能力Gorm基本操作package mainimport ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql")type UserInfo struct { Id uint Name stri原创 2022-04-28 17:22:03 · 3082 阅读 · 0 评论 -
golang入门项目——Gin框架简易博客系统1.0
开发前的准备因为需要继承gorm,所以应该首先要拉取gormx相关包go get -u gorm.io/gormgo get -u gorm.io/driver/mysql原创 2022-04-28 04:31:51 · 1487 阅读 · 0 评论 -
golang入门笔记——Gin
Gin简介:Gin是一个golang的微框架,基于httprouter,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点Gin特征:1.速度快:基于基数树的路由,内存占用少。没有反射。可预测的API性能。中间件支持:传入的HTTP请求可以由中间件链和最终操作处理。2。Crash—freeGin可以捕获HTTP请求期间发生的panic并恢复它。这样,你的服务器将始终可用。3.JSON验证Gin可以解析和验证请求的JSON-例如,检查所需值的存在4.路由分组更好地组织原创 2022-04-27 14:53:59 · 9982 阅读 · 0 评论 -
golang八股文整理(持续搬运)
1.Go语言——垃圾回收Go V1.3之前的标记-清除:1.暂停业务逻辑,找到不可达的对象,和可达对象2.开始标记,程序找出它所有可达的对象,并做上标记3.标记完了之后,然后开始清除未标记的对象。4.停止暂停,让程序继续跑。然后循环重复这个过程,直到process程序生命周期结束标记-清除的缺点:STW(stop the world):让程序暂停,程序出现卡顿标记需要扫描整个heap清除数据会产生heap碎片为了减少STW的时间,后来对上述的第三步和第四步进行了替换。Go V1.5原创 2022-04-26 14:33:17 · 25586 阅读 · 5 评论 -
golang入门笔记—Beego从入门到放弃
Beego web开发流程:1)规划好url2)添加路由3)开发controller 继承beego.Controller4)测试beego工具包安装:go get -u github.com/astaxie/beegogo get -u github.com/astaxie/beego简单的beego演示beego会默认解析conf/app.conf下的配置信息app.confhttpaddr="127.0.0.1"httpport=9092appname=webautor原创 2022-04-23 01:15:25 · 2245 阅读 · 4 评论 -
golang入门笔记—redis
golang连接和初始化redispackage mainimport ( "context" "fmt" "time" "github.com/go-redis/redis/v8")var redisdb *redis.Clientfunc initRedis() (err error) { redisdb = redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "",原创 2022-04-21 00:21:09 · 1111 阅读 · 0 评论 -
golang入门项目—日志收集
传统ELK架构的日志收集:存在的问题:Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。适用于小规模的集群使用。第二种架构:位于各个节点上的Log Agent先将数据/日志传递给Kafka,并将队列中消息或数据交由Log Transfer,传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka,数据会先被存储下来,所以即使Logstash server因故障停止运行,数据也不会丢失。这种架构适合于较大集群使用原创 2022-04-18 00:23:43 · 3440 阅读 · 0 评论 -
golang入门笔记—ES
ES参考网站ES的介绍: Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。ES的基本概念:1.当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用Elastic原创 2022-04-16 17:20:52 · 3468 阅读 · 0 评论 -
golang入门笔记—etcd
etcd介绍:etcd是使用Go语言开发的一个开源的、高可用的分布式key—value存储系统,可以用于配置共享和服务的注册和发现类似的项目有zookeeker和consul。etcd具有以下的特点:1.完全复制:集群中的每个节点都可以使用完整的存档2.高可用性:Etcd可用于避免硬件的单点故障或网络问题3.一致性:每次读取都会返回跨多主机的最新写入4.简单:包括一个定义良好、面向用户的API(gRPC)5.安全:实现了带有可选的客户端证书身份验证的自动化TLS6.快速:每秒10000次写原创 2022-04-15 00:45:41 · 2844 阅读 · 4 评论 -
golang入门笔记—kafka
kafka参考网站介绍:Kafaka是一个分布式数据流平台,可以运行在单台服务器上,也可以在多台服务器上部署形成集群。它提供了发布和订阅功能,使用者可以发送数据到Kafka中,也可以从Kafka中读取数据(以便进行后续的处理)。Kafka具有高吞吐、低延迟、高容错等特点。1.Kafaka集群的架构:1.broker:每台机器都是一个broker2.topic:每个日志都给一个分类3.partition:分区,把同一个topic分成不同的分区,提高负载1.leader:分区的主节点(老大)原创 2022-04-14 13:39:32 · 2830 阅读 · 0 评论 -
golang入门笔记—Context
Go1.7加入了一个新的标准库context,它定义了Context类型,专门用来简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用对服务器传入的请求应该创建上下文,而对服务器的传出调用应该接受上下文。它们之间的函数调用链必须传递上下文,或者可以使用WithCancel、WithDeadline、WithTimeout或WithValue创建的派生上下文。当一个上下文被取消时,它派生的所有上下文也被取消。//为啥需要co原创 2022-04-13 14:50:12 · 501 阅读 · 0 评论 -
golang入门笔记—数据库操作
//Go连接MySQL示例func connect()(err error) { //数据库信息 dsn := "root:******@tcp(localhost:3306)/login" //"用户名:密码@[连接方式](主机名:端口号)/数据库名" //连接数据库 db, err := sql.Open("mysql", dsn) //不会校验用户名密码是否正确,只校验数据源格式 if err != nil { //dsn格式不正确时报错 fmt.P原创 2022-04-12 22:07:31 · 1334 阅读 · 0 评论 -
golang入门笔记—http
//Http服务端package mainimport ( "fmt" "io/ioutil" "net/http")func f1(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadFile("./xx.txt") if err != nil { w.Write([]byte(fmt.Sprintf("%v", err))) } w.Write(b)}func main() { http.H.原创 2022-04-10 22:48:33 · 181 阅读 · 0 评论 -
golang入门笔记—socket编程
//server端package main//tcp server端import ( "fmt" "net")func processConn(conn net.Conn) { //3.与客户端通信 var tmp [128]byte for { n, err := conn.Read(tmp[:]) if err != nil { fmt.Println("read from conn failed,err:", err) return } fmt..原创 2022-04-10 11:34:24 · 685 阅读 · 0 评论