经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
 Go语言
golang中接口对象的转型两种方式

golang中接口对象的转型两种方式

接口对象的转型有两种方式: 1. 方式一:instance,ok:=接口对象.(实际类型)   如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true   配合if...else if...使用 2. 方式二:   接口对象.(type)   ...[2021/10/11]

Go语言的接口详解

目录1、接口的用途2、类型断言3、类型选择4、空接口5、匿名空接口6、实现多个接口7、接口嵌套8、接口零值9、make和new的区别总结 接口就是一系列方法的集合(规范行为) 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为,规范子类对象的行为。 在 Go 语言中的接口是非侵入式...[2021/10/11]

Go语言并发编程之互斥锁Mutex和读写锁RWMutex

Go语言并发编程之互斥锁Mutex和读写锁RWMutex

目录一、互斥锁Mutex1、Mutex介绍2、Mutex使用实例二、读写锁RWMutex1、RWMutex介绍2、RWMutex使用实例 在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言中提供了很多同步工具,...[2021/10/8]

Go语言--切片(Slice)详解

目录一、定义切片1、声明一个未指定大小的数组来定义切片2、使用make()函数来创建切片二、切片是可索引的1、len() 和 cap() 函数三、切片截取四、增加切片的容量 说明: Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一...[2021/10/8]

Go 泛型和非泛型代码详解

目录1. 开启泛型2.无泛型代码和泛型代码2.1. AddSlice2.2. 带方法的约束 StringConstraint 1. 开启泛型 在 Go1.17 版本中,可以通过: export GOFLAGS="-gcflags=-G=3" 或者在编译运行程序时加上...[2021/10/8]

Go 语言中的死锁问题解决

Go 语言中的死锁问题解决

目录死锁 如何避免死锁死锁代码 死锁 死锁的4个条件 不可剥夺 线程已经获得的资源,在未使用完之前,不能被其他线程剥夺,只能在使用完后自己释放。 请求保持 线程 T1 保持了一个资源 R1 占用,但是又提出另外一个资源 R2 请求,此时,资源 R...[2021/8/26]

Go语言实现Base64、Base58编码与解码

目录1. 常见的编码 2. go语言实现base64的编码与解码 2.1 Base64编码原理 2.2 实现Base64的编码与解码 3. go语言实现base58编码与解码 3.1 base58的编码过程3.2 base58编解码具体实现 4. 最后 1. 常见的编码 base64:26个...[2021/7/26]

Go语言死锁与goroutine泄露问题的解决

目录什么时候会导致死锁 发送单个值时的死锁 多个值发送的死锁 解决多值发送死锁 应该先发送还是先接收 goroutine 泄漏 如何发现泄露 小结 什么时候会导致死锁 在计算机组成原理里说过 死锁有三个必要条件他们分别是 循环等待、资源共享、非抢占式,在并发中出现通道死锁只有两种情况: ...[2021/7/26]

浅析golang开发Error的使用详解

Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了什么错误,是特别可怕的一件事。 Error 基础 Golang中 error类型就是一个最基...[2021/7/21]

Mac下Vs code配置Go语言环境的详细过程

背景:最近受朋友介绍,学习Go语言。那么开始吧,首先从配置环境开始。 电脑:Mac Air,Vs code已经安装 一、Go下载和安装 下载地址:https: golang.google.cn/dl/ Mac版选择pkg,下载就可以直接安装了。其他类似操作,具体也可查找相关信息 二...[2021/7/19]

简单聊一聊Go语言中的数组和切片

目录1. 数组 2. 切片(Slice) append 函数 总结 1. 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此在 Go 语言中很少直接使用数组。和数组对应的类型是 Slice(切片),它是可以增长和收缩的动态序列,...[2021/7/19]

Go并发控制WaitGroup的使用场景分析

1. 前言 上一篇介绍了 Go并发控制--Channel 使用channel来控制子协程的优点是实现简单,缺点是当需要大量创建协程时就需要有相同数量的channel,而且对于子协程继续派生出来的协程不方便控制。 2. 使用WaitGroup控制 WaitGroup,可理解为Wait-G...[2021/7/12]

Go并发控制Channel使用场景分析

1. 前言 channel一个类型管道,通过它可以在goroutine之间发送和接收消息。它是Golang在语言层面提供的goroutine间的通信方式。 Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communicatio...[2021/7/12]

Go 语言结构实例分析

当前的调试部分可以使用 go run filename.go 来执行。 可以生成一个 build.sh 脚本,用于在指定位置产生已编译好的 可执文件: #!/usr/bin/env bash CURRENT_DIR=`pwd` OLD_GO_PATH="$GOPATH" ...[2021/7/5]

Go语言空白表示符_的实例用法

Go语言空白表示符_的实例用法

在GO语言中,导入了包,却不在代码中使用它,是非法的。当这么做时,编译器是会报错的。其原因是为了避免导入过多未使用的包,从而导致编译时间显著增加。如下代码: package main import ( "geometry/rectangle" 导入自定的包 ) ...[2021/7/5]

golang fmt格式“占位符”的实例用法详解

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} ...[2021/7/5]

golang中字符串MD5生成方式总结

golang中字符串MD5生成方式总结

方案一 func md5V(str string) string { h := md5.New() h.Write([]byte(str)) return hex.EncodeToString(h.Sum(nil)) } 方案二 fun...[2021/7/5]

go select编译期的优化处理逻辑使用场景分析

前言 select作为Go chan通信的重要监听工具,有着很广泛的使用场景。select的使用主要是搭配通信case使用,表面上看,只是简单的select及case搭配,实际上根据case的数量及类型,在编译时select会进行优化处理,根据不同的情况调用不同的底层逻辑。 select的编译...[2021/6/28]

深入理解 sync.Once 与 sync.Pool

深入理解 sync.Once 与 sync.Pool sync.Once 代表在这个对象下在这个示例下多次执行能保证只会执行一次操作。 var once sync.Once for i:=0; i < 10; i++ { once.Do(func(){ fmt.Println("e...[2021/6/28]

go+js登录注册例子(带邮箱验证)

1 搭建服务器 1 package index 2 3 import ( 4 "log" 5 "net/http" 6 7 "2021.6.28_WebServer_email.go/lib/utils" 8 ) 9 10 const ( 11...[2021/6/28]

Go--Sync.Once的应用

sync.Once 常应用于单例模式,例如初始化配置、保持数据库连接等。 init函数通常是所在package首次被加载时执行,如果一直没有被调用就会浪费内存。 sync.Once可以在代码任意位置初始化和调用,因此可以延迟到使用时在执行,并发场景下时线程安全的。(类似于C#中的Lazy语法...[2021/6/21]

Golang Heap 源码剖析

堆原理解析 堆一般指二叉堆。是使用完全二叉树这种数据结构构建的一种实际应用。通过它的特性,分为最大堆和最小堆两种。 如上图可知,最小堆就是在这颗二叉树中,任何一个节点的值比其所在子树的任意一个节点都要小。最大堆就是在这颗二叉树中,任何一个节点的值都比起所在子树的任意一个节点值都要大。 ...[2021/6/21]

Golang开源定时任务调度框架robfig/cron优化

Golang开源定时任务调度框架robfig/cron优化

项目中需要使用一个简单的定时任务调度的框架,最初直接从GitHub上搜了一个star比较多的,就是 https: github.com/robfig/cron 这个,目前有8000+ star。刚开始使用的时候发现问题不大,但是随着单机需要定时调度的任务越来越多,高峰期差不多接近500...[2021/6/15]

自适应微服务治理背后的算法

前言 go-zero 群里经常有同学问: 服务监控是通过什么算法实现的? 滑动窗口是怎么工作的?能否讲讲这块的原理? 熔断算法是怎么设计的?为啥没有半开半闭状态呢? 本篇文章,来分析一下 go-zero 中指标统计背后的实现算法和逻辑。 指标怎么统计 这个我们直接看 breaker...[2021/6/7]

GoLang 学习笔记(七)-- 声明变量风格,二级指针,隐式作用域

编辑器换成了 GoLand,看源码极其方便。就是快捷键又要适应一会儿。 今天开始看 《Go 程序设计语言》,别名《Go 语言圣经》。 $ ./goBible --type=书籍 --name=Go 语言圣经(一)--chapter=Program Structure 1. 声明变量,有四种...[2021/6/7]

如何设计 API 接口,实现统一格式返回?

文章目录: 目录前后端接口交互接口返回值约定返回值规范正确返回错误返回统一定义错误码错误码规范Controller 层如何用?正确返回错误返回详细代码实现错误码Controller总结问题思考 前后端接口交互 我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染,前端可以...[2021/6/7]

Golang nil slice 与 nil map 的不同设计

0.目录 1.表现 1.1 空值赋值 1.2 nil 值赋值 2.原因 2.1 append 并未改变原有 slice 2.2 如果 nil map 支持赋值 3.两种改进设计思路 3.1 slice 标准 3.2 map 标准 1.表现 1.1 空值赋值 t := []int{} ...[2021/6/7]

后端开发都应该了解的登录漏洞

登录是大部分网站都具备的一个功能,作为用户使用系统的第一步,如果登陆逻辑设计不合理,容易被攻击者利用,造成安全问题。 密码泄漏 弱口令 相信大家都知道弱口令是什么意思,用户为了方便,一般会使用123456、admin、pa wd、pa word、123qwe等这些作为自己的常用密码,方便好记。...[2021/6/7]

使用goland调试远程代码

前言 很多时候我们都在window上使用goland,并直接使用goland调试go代码。 但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试,但是太麻烦了。 因此我查阅资料发现,goland是支持远程调试的,因此写篇文章记录一下。 操作步骤 安...[2021/6/7]

一文带你搞懂 RPC 到底是个啥

RPC(Remote Procedure Call),是一个大家既熟悉又陌生的词,只要涉及到通信,必然需要某种网络协议。我们很可能用过HTTP,那么RPC又和HTTP有什么区别呢?RPC还有什么特点,常见的选型有哪些? 1. RPC是什么 RPC可以分为两部分:用户调用接口 + 具体网络协...[2021/5/31]

Gorm入门使用

Gorm GORM CRUD 数据库的增删改查 go get -u github.com/jinzhu/gorm go get -u github.com/jinzhu/gorm/dialect mysql go常规查询操作 package main import ( "encod...[2021/5/31]

通用连接池帮你解决资源管理难题

前言 群里老有同学问,go-zero 的 数据库 和 redis 库是否有连接池支持。先说结论:有的,可以放心大胆用! 从框架设计来说,对于数据库连接这种资源当然是尽可能减少频繁操作: 为业务减负 提升框架自身的性能 池化技术是一个通用化技术,本身就应该作为一个通用库支撑框架的上层业务 ...[2021/5/31]

GoLang 学习笔记(四)-- 并发基础(goroutine,信道,sync.Mutex,sync.WaitGroup)

今天把 A Tour of Go 的最后章节看完。 1. goroutine(Go 程) goroutine 是 Go 管理的一个轻量级线程。 go f(x, y, z) goroutine 会先对 f,x,y,z 求值,再把 f(x, y, z) 放到一个新的 goroutine 中。...[2021/5/31]

GoLang 学习笔记(六)--Effective Go(高效编程风格)(二)

1. 数据(书接上回) 1.1 map(映射) slice 不能用作 key,因为并没有定义两个 slice 是否相等的手段。 1.2 String() 方法 如果要在 String() 方法(Stringer 接口)里使用 Sprintf,请不要使用使用 %s 或者 字符串的 %v,因为一这...[2021/5/31]

懂得取舍才是缓存设计的真谛

Previously 前两篇文章(缓存稳定性 和 缓存正确性)跟大家讨论了缓存的『稳定性』和『正确性』,缓存常见问题还剩下『可观测性』和『规范落地&工具建设』 稳定性 正确性 可观测性 规范落地和工具建设 上周文章发完之后,很多同学对我留的问题进行了深入的讨论,我相信经过深度的思考...[2021/5/24]

Gin框架介绍与使用

Gin 初识 Gin框架 下载(可能会下载不全。缺什么get什么即可) go get -u -v github.com/gin-gonic/gin package main import ( "github.com/gin-gonic/gin" "log" "net/http"...[2021/5/24]

进程内缓存助你提高并发能力!

前言 缓存,设计的初衷是为了减少繁重的IO操作,增加系统并发能力。不管是 CPU多级缓存,page cache,还是我们业务中熟悉的 redis 缓存,本质都是将有限的热点数据存储在一个存取更快的存储介质中。 计算机本身的缓存设计就是 CPU 采取多级缓存。那对我们服务来说,我们是不是也可以采...[2021/5/24]

Go 函数详解

一、函数基础 函数由函数声明关键字 func、函数名、参数列表、返回列表、函数体组成 函数是一种类型。函数类型变量可以像其他类型变量一样使用,可以作为其他函数的参数或返回值,也可以直接调用执行 函数名首字母大小写决定了其包可见性 参数和返回值需用()包裹,如果返回值是一个非命名的参数,则可省略。...[2021/5/24]

Go - 开箱即用,WEB 界面一键安装,没有项目经验,可以拿这个练手

安装界面 启动程序之后,会在浏览器中自动打开安装界面。 因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。 如上,初始化成功后,重新启动程序,会在浏览...[2021/5/24]

缓存数据一致性 - 架构师峰会演讲实录

缓存数据一致性 - 架构师峰会演讲实录

Previously 缓存系统涉及的问题和知识点是比较多的,我主要分为以下几个方面来跟大家探讨: 稳定性 正确性 可观测性 规范落地和工具建设 上篇 我们分析了缓存系统的稳定性,介绍了 go-zero 是怎么解决缓存穿透、缓存击穿、缓存雪崩问题的。比较浅显易懂,且具有比较强的实战意义,推荐...[2021/5/17]

Go实现各类限流的方法

前 言 在开发高并发系统时,我们可能会遇到接口访问频次过高,为了保证系统的高可用和稳定性,这时候就需要做流量限制,你可能是用的 Nginx 这种来控制请求,也可能是用了一些流行的类库实现。限流是高并发系统的一大杀器,在设计限流算法之前我们先来了解一下它们是什么。 限 流 ...[2021/5/10]

[Go] embed指令嵌入静态文件到二进制包

go 1.16开始提供了embed指令 , 可以将静态资源嵌入到编译包里面 这样就可以把网页模板等文件直接打包了,就不需要每次还要拷贝静态文件 常规用法: import _ "embed" go:embed hello.txt var s string func main() { ...[2021/5/7]

Golang实现http文件上传小功能的案例

看代码吧~ package main import ( "fmt" "io" "net/http" "os" ) func main() { http.HandleFunc("/", index) http.HandleFunc("/upload", upl...[2021/5/7]

golang 如何实现HTTP代理和反向代理

golang 如何实现HTTP代理和反向代理

代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端。 代理的功能有很多,事实上整个互联网到处都充斥着代理服务器。如果所有的 HTTP 访问都是客户端和服务器端直接进行的话,我们的网络不仅会变得缓慢,而且性能会大打折扣。 代理服务器根据不同的配置和使...[2021/5/7]

简单聊聊内存逃逸 | 剑指offer - golang

问题 简单讲讲golang的内存逃逸吗? 解析 什么是内存逃逸 在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少)、返回地址、返回值之类的数据,这一块内存区域有特定的结构和寻址方式,寻址起来十分迅速,开销很少。这一块内存地址称为栈。栈是线程级别的,大小在创建的时候已经确...[2021/5/6]

Go语言操作数据库及其常规操作

Go操作MySQL 安装: go get -u github.com/go-sql-driver/mysql GO语言的操作数据库的驱动原生支持连接池, 并且是并发安全的 标准库没有具体的实现 只是列出了一些需要的第三方库实现的具体内容 第一次连接MySQL成功 package main...[2021/5/6]

Go并发编程(goroutine)

Go并发 并发编程里面一个非常重要的概念, go语言在语言层面天生支持并发, 这也是Go语言流行的一个重要的原因 Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个人聊天) 并行:同一时刻执行多个任务 (你和你的朋友 都在用微信和 你们的一个朋友聊天) ...[2021/5/6]

GinAdmin——基于golang的web管理平台

GinAdmin 这个项目是以Gin框架为基础搭建的后台管理平台,虽然很多人都认为go是用来开发高性能服务端项目的,但是也难免有要做web管理端的需求,总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目,请大家多提意见指正! GitHub地址 https: github.com/g...[2021/5/6]

Go语言核心技术,资深技术专家3个月带你通关

如果你认真地跟我一起走完这个专栏,那么基本掌握Go语言是肯定的,成为你学习Go语言最重要的敲门砖和垫脚石。   许多大厂都已经拥抱Go语言,高人才需求也就意味着高额的回报,如今掌握Go语言已经成为了简历上的一项亮点, 不但优先录取,薪资也随之一路攀升。   从大厂面...[2021/5/6]

[Go] 解决go的fatal error: concurrent map writes map非并发安全

map不是并发安全的 , 当有多个并发的groutine读写同一个map时  会出现panic错误 concurrent map writes   例如下面的代码会出现这个错误: var mMap map[int]int func TestMyMap(t *te...[2021/5/6]

347
2
记录数:817 页数:1/1712345678910下一页尾页
加载更多
 友情链接: NPS