Golang
文章平均质量分 67
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。
中亿丰数字科技集团有限公司
DTCloud是一套基于Python+Go开源商业应用程序.主要面向建筑工程行业,物联网行业,数字化行业,打造的企业信息一体化的解决方案。
展开
-
Go语⾔一周入门
Golang:Go语⾔基本语法——变量Go语⾔基本语法——数据类型Go语⾔基本语法——算术运算符Go语⾔基本语法——关系运算符Go语⾔基本语法——逻辑运算符Go语⾔基本语法——位运算符Go语言流程控制——条件语句Go语言流程控制——循环语句Go语言函数Go语言指针Go语言——函数的参数传递Go内置容器——数组和切片(上)Go内置容器——数组和切片(中)Go内置容器——数组和切片(下)Go内置容器——map和list(上)Go内置容器——map和list(下)Go语言——字.原创 2022-05-25 08:28:36 · 876 阅读 · 0 评论 -
关于系统监控和Go语言采集代码
在生产环境,有时候需要对系统的性能进行时时采集,可以预防问题的出现,比如CPU、内存、硬盘等硬件问题导致系统崩溃,在Linux下有以下命令。原创 2023-07-03 17:08:41 · 335 阅读 · 0 评论 -
go演示GRPC的用法
当然,我可以为您提供一个使用Go语言演示gRPC的简单示例。首先,您需要确保已经安装了Go编程语言和gRPC库。下面是一个基本的gRPC示例,其中包括服务器端和客户端。示例演示了一个简单的计算器服务,客户端可以发送两个数字给服务器,然后服务器返回它们的和。首先,我们将定义一个.proto文件来定义gRPC服务和消息格式。文件,其中包含了gRPC服务和消息的Go定义。接下来,我们将创建服务器端代码。现在,我们将创建客户端代码。原创 2023-06-30 15:40:13 · 182 阅读 · 0 评论 -
Go语言中的自定义函数类型
接下来,我们定义了一个名为apply的函数,它接受一个MyFunc类型的参数,并将其应用于传入的参数x上。最后,在main函数中,我们将double函数赋值给f,并调用apply函数,输出结果为10。回调函数是一种常见的设计模式,通过将函数作为参数传递给其他函数,在合适的时机进行调用。我们可以定义一个适当的函数类型,然后将其作为参数传递给其他函数,实现灵活的回调机制。在上述示例中,我们定义了一个名为MyFunc的函数类型,它接受一个int类型的参数并返回一个int类型的结果。自定义函数类型的语法。原创 2023-06-27 16:44:39 · 239 阅读 · 0 评论 -
Go语言中的defer关键字
在Go语言中,defer关键字是一个独特而强大的特性,它可以将代码块推迟到函数返回之前执行。这种机制可以用于资源的释放、错误处理、性能优化等多种场景。本文将详细介绍defer的用法和工作原理,并通过实际示例来展示其在不同情况下的应用。原创 2023-06-21 14:08:08 · 147 阅读 · 0 评论 -
如何调试golang程序
介绍了Golang中两种常用的调试工具,dlv和pprof,并说明了如何使用它们进行代码调试和性能分析。在实际开发中,我们可以组合使用这些工具来快速定位和修复代码问题,提高代码质量和效率。作者:朱磊。原创 2023-06-17 09:27:41 · 861 阅读 · 0 评论 -
关于golang的定时任务
定时任务是指在预定的时间间隔或特定的时间点执行的任务。在 Golang 中,实现定时任务可以借助标准库提供的时间相关功能和第三方库。本节将简要介绍 Golang 的时间相关函数和定时任务的基本概念。本文详细介绍了在 Golang 中实现定时任务的多种方法和最佳实践。通过使用标准库的定时器、第三方库、基于调度器的解决方案以及时间戳和定时器触发任务的方式,可以满足不同场景下的定时任务需求。此外,还强调了并发定时任务的考虑和跨平台兼容性。原创 2023-06-13 15:59:24 · 2657 阅读 · 0 评论 -
golang中make与new的区别
new函数:为所有的类型分配内存,并初始化为零值,返回指针。make函数:只能为 slice,map,chan 分配和初始化内存,返回的是类型。此外, new 函数并不常用,大家更喜欢使用短语句声明的方式来代替用new来声明变量。原创 2023-06-09 16:21:55 · 69 阅读 · 0 评论 -
gorm的使用
当涉及到数据库操作时,Golang 中的 GORM 是一个非常流行的 ORM(对象关系映射)库。它提供了简洁而强大的 API,使得数据库操作变得更加容易和高效。在本篇技术分享文章中,我们将探讨 GORM 的一些核心功能和用法。上述示例定义了一个名为 User 的模型,包含了一些常见的字段。gorm.Model 是 GORM 提供的内置模型,用于自动添加 ID、CreatedAt、UpdatedAt 和 DeletedAt 字段。上述代码会检查数据库中是否存在 users 表,如果不存在则会创建。原创 2023-06-08 11:18:08 · 164 阅读 · 0 评论 -
MQTT协议及其在Golang中的实现
MQTT协议是由IBM开发的,最初用于连接远程遥测设备到物联网中的服务器。它是一种轻量级的、开放的协议,通过TCP/IP网络进行消息传输。MQTT采用发布/订阅(publish/subscribe)模式,其中设备可以作为发布者(publisher)发布消息,也可以作为订阅者(subscriber)订阅消息。原创 2023-06-08 09:36:45 · 1688 阅读 · 0 评论 -
Go vs netcore
pandas 库是基于numpy库 的软件库,因此安装Pandas 之前需要先安装numpy库。默认的pandas不能直接读写excel文件,需要安装读、写库即xlrd、xlwt才可以实现xls后缀的excel文件的读写,要想正常读写xlsx后缀的excel文件,还需要安装openpyxl库。其中,Line_number是行号,column_name是列名,可缺省,列名缺省获取整行。或在read_excel()传参keep_default_na=False。单元格为空显示为NaN 为避免替换为空字符串。原创 2023-06-07 16:15:04 · 436 阅读 · 0 评论 -
使用Go语言中的Channel实现并发编程
在Go语言中,Channel是一种用于在Goroutine之间进行通信的数据结构。它类似于队列,可以在一个Goroutine中将数据发送到Channel,然后在另一个Goroutine中接收这些数据。Channel提供了一种同步的方式,确保发送和接收操作按顺序进行,从而避免了并发访问共享数据的问题。原创 2023-06-03 09:57:30 · 297 阅读 · 0 评论 -
Golang Slice:强大的动态数组数据结构
然而,Go语言提供了一种强大的内置数据结构,称为切片(slice),它克服了这个限制并提供了类似动态数组的功能。它是一个由三个字组成的数据结构,包括指向底层数组的指针、切片的长度和切片的容量。指针指向通过切片可以访问到的底层数组的第一个元素,长度表示切片中元素的个数,容量则表示切片在不调整底层数组大小的情况下可以容纳的最大元素个数。然而,如果容量不足,将会分配一个更大尺寸的新底层数组,并将旧数组中的元素复制到新数组中。切片还支持切片操作,允许我们从现有的切片或数组创建新的切片。的切片,包含五个整数。原创 2023-06-01 10:05:33 · 120 阅读 · 0 评论 -
如何防止缓存被击穿
这两个方法的缺点在哪里?使用全局变量和channel,在独立开发的条件下是可以的。但是,一旦到了团队协同开发,需要统一所有开发者的编码习惯。需要一个共同的解决方案。原创 2023-05-26 14:13:49 · 75 阅读 · 0 评论 -
golang·context
这两个方法的缺点在哪里?使用全局变量和channel,在独立开发的条件下是可以的。但是,一旦到了团队协同开发,需要统一所有开发者的编码习惯。需要一个共同的解决方案。原创 2023-05-26 09:34:21 · 60 阅读 · 0 评论 -
Go语言中的数组以及其相关特性
数组的长度是在声明时指定的,一旦定义后,其长度将是固定的,不能动态改变。总结来说,数组是Go语言中的一个重要数据结构,它提供了一种固定长度、相同类型元素的序列。然而,由于数组的长度是固定的,使用切片更为常见,因为它提供了更多的灵活性。需要注意的是,数组在Go语言中是值类型,当数组被传递给函数时,实际上是传递了数组的副本,而不是引用。可以使用嵌套的索引来访问多维数组的元素,例如,可以使用等号来修改数组的特定位置的元素的值,例如,可以通过索引来访问数组中的元素,索引从0开始,例如,函数用于获取数组的长度,原创 2023-05-25 14:50:59 · 45 阅读 · 0 评论 -
Go性能调优:深入理解和应用Go pprof
在开发高性能的Go应用程序时,性能调优是一个重要的环节。Go语言提供了一种强大的性能分析工具——pprof,它可以帮助开发人员定位应用程序中的性能瓶颈。本文将介绍如何使用Go pprof进行性能分析,并提供一些常见的优化技巧,帮助您更好地调优Go应用程序。Go pprof是Go语言的一个性能分析工具,它使用了一种称为"profiling"的技术来监测应用程序的运行时性能。通过收集和分析性能数据,pprof可以提供详细的函数调用图、内存使用情况、CPU利用率等信息,帮助我们找出代码中的性能问题。原创 2023-05-25 10:10:23 · 129 阅读 · 0 评论 -
基于GoFrame框架开发要点
我们在cmd中注册Goods相关的路由,我们发现注册路由时,controller.Goods飘红,原因是我们还没有编写这个方法,我们需要通过编写logic层实现业务逻辑,通过配置goland插件,自动生成service代码。首先,我们通过gf init 项目名 -u,来新建一个项目,然后我们在mysql中设计好表结构,在hack/config.yaml里面配置好数据库的参数,通过 gf gen dao生成模型,生成的模型位置在dao/do/model下面。就在logic层的init函数中实现服务的注册;原创 2023-05-20 09:14:24 · 220 阅读 · 0 评论 -
用Go语言连接和使用MQTT协议的设备
通过以上代码示例,我们展示了如何使用Go语言连接和使用MQTT协议的设备。通过使用Go语言的并发特性,我们能够轻松地处理大规模的设备通信和数据传输。无论是开发智能家居系统、工业自动化还是物联网解决方案,使用Go语言和MQTT协议能够帮助我们构建高效可靠的物联网应用。在物联网领域,设备之间的通信是至关重要的。本文将介绍如何使用Go语言连接和使用MQTT协议的设备,并提供一个使用Go语言编写的示例代码。要使用Go语言连接和使用MQTT协议的设备,我们可以使用Eclipse Paho MQTT Go客户端库。原创 2023-05-19 13:48:01 · 676 阅读 · 0 评论 -
如何使用Go与MQTT进行通信
本文介绍了如何使用 Go 编程语言与 MQTT(Message Queuing Telemetry Transport)进行通信。MQTT 是一种轻量级的消息传输协议,广泛应用于物联网和实时通信场景。通过本文的指导,您将学习如何使用 Go 语言创建 MQTT 客户端,进行消息的发布和订阅。原创 2023-05-17 13:47:54 · 461 阅读 · 0 评论 -
Go语言中的GC
垃圾回收开始时从root对象开始扫描,把root对象引用的内存标记为"被引用",考虑到内存块中存放的可能是指针,所以还需要递归的进行标记,全部标记完成后,只保留被标记的内存,未被标记的全部标识为未分配即完成了回收。简单的说,垃圾回收的核心就是标记出哪些内存还在使用中(即被引用到),哪些内存不再使用了(即未被引用),把未被引用的内存回收掉,以供后续内存分配时使用。(2)标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记为"被引用",没有被标记的进行回收。原创 2023-05-16 17:26:15 · 683 阅读 · 0 评论 -
Go语言协程技术文档
协程(goroutine)是Go语言的一种轻量级线程,可以在一个线程中运行多个协程,从而实现高并发程序。协程具有低开销、高效率和易于管理等优点,被广泛应用于网络服务、云计算、大数据处理和人工智能等领域。本文将介绍Go语言协程的基本概念和使用方法。原创 2023-04-27 14:39:09 · 84 阅读 · 0 评论 -
Go语言中协程(goroutine)的介绍和使用
协程是 Go 语言中非常重要的并发编程机制,其轻量级、低成本、高效率的特点使得它成为实现高并发的理想选择。通过 go 关键字和相关的协程函数,我们可以方便地创建和管理协程,实现高效的并发编程。在实际开发中,需要根据具体的场景和需求,合理地使用协程,以提高程序的性能和可维护性。作者:吕政超。原创 2023-04-11 10:05:37 · 176 阅读 · 0 评论 -
GORM自定义类型
/自定义的数据类型必须实现 Scanner 和 Valuer 接口,以便让 GORM 知道如何将该类型接收、保存到数据库// 实现 sql.Scanner 接口,Scan 将 value 扫描至return nil// 实现 driver.Valuer 接口,Value 返回 json value//实现这两个接口方法之后我们就可以直接使用这个类型了//查询时gorm就会直接为我们转成当前类型Id int64//插入时我们就可以直接用字符串插入。原创 2023-04-10 16:33:51 · 303 阅读 · 2 评论 -
Golang语言之Channel通信,并发编程
不同于大多编程语言的多线程,golang的并发执行单元是一种称之为goroutine的携程,由于绝大部分语言在其共享数据时会用到并发锁,再加上GC,其执行效率多多少少会受到影响,golang的并发编程简单。Go是一种静态强类型的开源语言,诞生于2009年,是非常年轻的一门语言其主要目标时“兼具Python等动态语言的开发速度,同时又具备想C语言C++的安全性与应能”,其中最大的特点(优势)就是并发编程。*注意:管道的出入方式与出弹栈有所不同,前者时先入先出而后者是先入后出(如下图)多个写成最后汇总至结果。原创 2023-04-10 13:56:42 · 195 阅读 · 0 评论 -
反射
反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期间将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期间获取类型的反射信息,并且有能力修改它们。Go程序在运行期间使用reflect包访问程序的反射信息。**总结:反射就是运行时动态地(从内存地址中)获取一个变量的类型信息和值信息。原创 2023-04-07 16:43:27 · 67 阅读 · 0 评论 -
go map
正是因为扩容过程中会发生键值对迁移,键值对的地址也会发生改变,所以才说map的元素是不可寻址的,如果要取一个value的地址则不能通过编译。如果获取不到判断是否触发扩容 再则执行newoverflow 获取预留溢出桶,或者新建溢出桶 将元素设置在该桶的第0个上。先比较tophash再比较key 获取要使用的元素tophash 地址,k地址 v地址。根据哈希种子和key获取哈希值,桶编号,桶,tophash。根据哈希种子和key获取哈希值,桶编号,桶,tophash。遍历桶和溢出桶中的元素。原创 2023-04-07 09:37:06 · 43 阅读 · 0 评论 -
Go语言规范汇总
本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开发空间,既使用统一的开发工具来保证代码最后的格式的统一,开发中对文件和代码长度的控制,必须经过go语言自带的检测机制等。【原则1.1】合理规划目录,一个目录中只包含一个包(实现一个模块的功能),如果模块功能复杂考虑拆分子模块,或者拆分目录。原创 2023-04-01 10:57:17 · 185 阅读 · 0 评论 -
使用Go语言创建WebSocket服务器和客户端
在这个示例中,我们使用 JavaScript WebSocket API 创建了一个 WebSocket 连接,并打印连接状态和收到的消息。当我们打开这个 HTML 文件时,它会自动连接到我们的 WebSocket 服务器,并显示连接状态和收到的消息。在这篇文章中,我们将介绍如何使用 Go 语言编写一个简单的 WebSocket 服务器。除了使用浏览器的 JavaScript WebSocket API,我们还可以使用其他 WebSocket 客户端库,例如 Go 的。在这个示例中,我们使用。原创 2023-03-11 10:32:06 · 1405 阅读 · 0 评论 -
GO的一些常识
+v 在 %v 基础上,对结构体字段名和值进行展开。%q 带双引号的字符串"abc"或带单引号的字符’c’%T 输出 Go 语言语法格式的类型和值。%X 整型以十六进制、字母大写方式显示。%#v 输出 Go 语言语法格式的值。%x 整型以十六进制方式显示。%p 指针,十六进制方式显示。%b 整型以二进制方式显示。%o 整型以八进制方式显示。%d 整型以十进制方式显示。%v 按值的本来值输出。%% 输出 % 本体。原创 2023-02-14 09:10:48 · 47 阅读 · 0 评论 -
支付宝签名验证
支付宝签名验证原创 2023-02-01 09:10:50 · 1915 阅读 · 0 评论 -
GO冷门又重要的知识点(一)
了解GO的实用小知识原创 2022-07-10 18:24:08 · 1518 阅读 · 0 评论 -
Go语⾔实现加密算法(上)
(⼀)、Hash的定义1. hash的单词意思* n.剁碎的⻝物; 蔬菜⾁丁* vt.把…弄乱; 切碎; 2. hash (哈希或散列)算法是信息技术领域⾮常基础也⾮常重要的技术。它能任意⻓度的⼆进制值(明⽂)映射为较短的固定⻓度的⼆进制值(Hash 值),并且不同的明⽂很难映射为相同的 Hash 值。hash 值在应⽤中⼜被称为数字指纹(fingerprint)或数字摘要(digest)、消息摘要。原创 2022-06-02 11:00:00 · 1641 阅读 · 0 评论 -
Go并发编程——channel( 下 )
(⼆)、NewTimer函数NewTimer创建⼀个新的计时器,它会在⾄少持续时间d之后将当前时间发送到其通道上。NewTimer()函数的源码// NewTimer creates a new Timer that will send// the current time on its channel after at least duration d.func NewTimer(d Duration) *Timer示例代码(三)、After()函数After()函数相当于New原创 2022-06-02 10:15:00 · 1410 阅读 · 0 评论 -
Go并发编程——channel(上)
(⼀)、通道的概述1. 使⽤通道的意义* 单纯地将函数并发执⾏没有意义。函数与函数间需要交换数据才能体现出并发执⾏的意义。* 虽然可以使⽤共享内存进⾏数据交换,但是共享内存在不同goroutine中容易发⽣竞态问题,必须使⽤互斥对内存进⾏加锁,所以造成性能问题。* Go语⾔中提倡使⽤通道channel的⽅式代替共享内存。也就是说,Go语⾔中主张,应该通过数据传递来实现共享内存,⽽不是通过共享内存来实现消息传递。 * 排队的⽬的是避免拥堵、插队造成的资源使⽤和交换过程低效问题。多个goroutine原创 2022-06-01 15:54:22 · 1191 阅读 · 0 评论 -
Go并发编程——goroutine(下)
有哪些编程语⾔应⽤到了协程呢?1. Lua语⾔Lua从5.0版本开始使⽤协程,通过扩展库coroutine来实现。2. Python语⾔python可以通过 yield/send 的⽅式实现协程。在python 3.5以后,async/await 成为了更好的替代⽅案。3. Go语⾔Go语⾔对协程的实现⾮常强⼤⽽简洁,可以轻松创建成百上千个协程并发执⾏。4. Java语⾔Java语⾔并没有对协程的原⽣⽀持,但是某些开源框架模拟出了协程的功能,例如:Kilim框架。原创 2022-06-01 11:19:53 · 1019 阅读 · 0 评论 -
Go并发编程——goroutine(上)
⼀、并发与并⾏(⼀)、Go是并发语⾔,⽽不是并⾏语⾔1、在讨论如何在Go中进⾏并发处理之前,我们⾸先必须了解什么是并发,以及它与并⾏性有什么不同。(Go is a concurrent language and not a parallel one. )2、并发性Concurrency把任务在不同的时间点交给处理器进⾏处理。在同⼀个时间点,任务不会同时运⾏。并发性是同时处理许多事情的能⼒。举个例⼦,打电话和吃饭。吃饭时,电话来了,需要停⽌吃饭去接电话。电话接完后回来继续吃饭,这个过程是并发执⾏原创 2022-05-31 18:10:22 · 1224 阅读 · 0 评论 -
Go⽹络编程——http
Http概述概念Hypertext Transfer Protocol,超⽂本传输协议。是互联⽹应⽤最⼴泛的⽹络协议,定义了客户端和服务端之间请求与响应的传输标准。HTTP是⼀个基于TCP/IP通信协议来传递数据,服务器传输超⽂本到本地浏览器的传送协议。HTTP协议⼯作于客户端-服务端架构上。浏览器可作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。它是⼀个⽆状态的请求/响应协议。客户端请求消息和服务器响应消息都会包含请求头原创 2022-05-29 09:00:00 · 1732 阅读 · 0 评论 -
Go异常处理——defer、panic、recover
延迟是什么?defer即延迟语句,极个别的情况下,Go才使⽤defer、panic、recover这种异常处理形式。defer可以延迟函数、延迟⽅法、延迟参数。延迟函数可以在函数中添加多个defer语句。当函数执⾏到最后时,这些defer语句会按照逆序执⾏,最后该函数返回。特别是当你在进⾏⼀些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题如果有很多调⽤defer,那么defer是采⽤后进先出模式在离开所在的⽅法时,执⾏(报错的时候也原创 2022-05-28 10:30:13 · 1386 阅读 · 0 评论 -
Go错误处理——error
错误处理(⼀)、错误是什么? 1、错误指程序中出现不正常的情况,从⽽导致程序⽆法正常执⾏。⼤多语⾔中使⽤try…catch…finally语句执⾏。假设我们正在尝试打开⼀个⽂件,⽂件系统中不存在这个⽂件。这是⼀个异常情况,它表示为⼀个错误。不要忽略错误。永远不要忽略⼀个错误。忽视错误会招致麻烦。让我重新编写⼀个示例,该示例列出了与模式匹配的所有⽂件的名称,⽽忽略了错误处理代码。2、Go语⾔中没有try…catchGo 语⾔通过内置的错误类型提供了⾮常简单的错误处理机制。错误值可以存储在变原创 2022-05-28 09:39:56 · 1081 阅读 · 0 评论