潘广宇
码龄6年
关注
提问 私信
  • 博客:731,183
    社区:280
    731,463
    总访问量
  • 304
    原创
  • 30,325
    排名
  • 274
    粉丝
  • 学习成就

个人简介:主攻Golang|Python|PHP|数据库|高并发架构|人工智能,Base广州,博客主要写一些工作上遇到的问题和处理经验

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 目前就职: 同花顺股份有限公司
  • 加入CSDN时间: 2019-02-08
博客简介:

潘广宇的博客

博客描述:
panguangyu.blog.csdn.net
查看详细资料
  • 原力等级
    成就
    当前等级
    6
    当前总分
    2,343
    当月
    4
个人成就
  • 获得452次点赞
  • 内容获得95次评论
  • 获得577次收藏
  • 代码片获得5,962次分享
创作历程
  • 26篇
    2024年
  • 10篇
    2023年
  • 42篇
    2022年
  • 24篇
    2021年
  • 44篇
    2020年
  • 159篇
    2019年
成就勋章
TA的专栏
  • Php
    67篇
  • Golang
    43篇
  • Python
    32篇
  • Mysql
    27篇
  • Redis
    24篇
  • Linux
    21篇
  • Erlang
    17篇
  • Nginx
    13篇
  • Kafka
    13篇
  • PostgreSQL
    12篇
  • Lua
    12篇
  • Openresty
    10篇
  • Tensorflow
    9篇
  • Clickhouse
    1篇
  • AI
    2篇
  • HTML
    2篇
  • Git
    2篇
  • Docker
    6篇
  • Elasticsearch
    2篇
  • Logstash
    1篇
  • Flask
  • Sanic
    1篇
  • ELK
    1篇
  • 深入浅出 MySQL 笔记
    6篇
  • Swoole
    7篇
  • C
    4篇
  • Windows
    4篇
  • Deep Learning
    1篇
  • Yar
    1篇
  • Vue
    1篇
  • Java
    1篇
  • Memcached
    2篇
  • MongoDB
    2篇
  • OS
    1篇
  • Math
    3篇
  • Secuity
  • ThinkPHP
    4篇
  • Beego
    2篇
  • OpenCV
    1篇
  • Javascript
    6篇
兴趣领域 设置
  • 编程语言
    pythonphpluaerlanggolang
  • 大数据
    mysqlhadoopredismongodbsparkelasticsearch
  • 云原生
    zookeeperdockerkubernetes
  • 人工智能
    opencv神经网络自然语言处理sklearnword2vectensorflowpaddlepaddle
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

175人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

KafkaQ - 好用的 Kafka Linux 命令行可视化工具

鉴于并没有在网上找到比较好的linux平台的kafka可视化工具,今天为大家介绍一下自己开发的在 Linux 平台上使用的可视化工具KafkaQ。* 搜索版本支持上述3种查询之外,增加关键词搜索,即在分片中搜索指定关键词的message。* 普通版本支持上述3种查询。
原创
发布博客 2024.06.13 ·
1896 阅读 ·
11 点赞 ·
1 评论 ·
2 收藏

Php 通过 FFmpeg 获取远程视频的时长和截图

突然发现 FFmpeg 这个软件还可以直接拉取远程视频的相关信息,也就是可以不通过下载视频到本地的方式,直接远程去获取视频时长和截图。经测试,以上过程的调用,并不需要完全把视频下载到本地再解析,可以实现远程获取直接秒级返回!假设我们的视频url是:http://my.com/a.mp4。第二步,通过composer安装FFmpeg的库。第一步,Linux 安装 FFmpeg 软件。
原创
发布博客 2024.04.23 ·
900 阅读 ·
3 点赞 ·
2 评论 ·
1 收藏

Golang 手把手搭建一个简单的 gRPC 服务

注意项:gRPC 和标准库的 RPC 框架有一个区别,gRPC 生成的接口并不支持异步调用。不过可以在多个 Goroutine 之间安全地共享 gRPC 底层的 HTTP/2 连接,因此可以通过在另一个 Goroutine 阻塞调用的方式模拟异步调用。2、安装 protoc-gen-go-grpc,安装方式参考上述文章提到的 protoc-gen-go 安装方式。
原创
发布博客 2024.04.10 ·
669 阅读 ·
7 点赞 ·
0 评论 ·
12 收藏

Golang ProtoBuf 初学者完整教程:语法

7、RPC 服务名和方法名,均使用首字母大写驼峰风格,例如service FooService{ rpc GetSomething() }4、消息名使用首字母大写驼峰风格(CamelCase),例如message StudentRequest { ... }1、文件名使用小写下划线的命名风格,例如 lower_snake_case.proto。5、字段名使用小写下划线的风格,例如 string status_code = 1。6、枚举类型,枚举名使用首字母大写驼峰风格,例如 enum FooBar。
原创
发布博客 2024.04.10 ·
1101 阅读 ·
33 点赞 ·
0 评论 ·
5 收藏

Golang ProtoBuf 初学者完整教程:安装

Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、Python 等多种语言的代码。需要安装protoc-gen-go.exe可执行文件,当protoc命令执行时,当编译器调用时传递了 --go_out命令行标志时, protoc就会使用它。1、安装protoc:https://github.com/protocolbuffers/protobuf/releases。
原创
发布博客 2024.04.10 ·
1064 阅读 ·
10 点赞 ·
0 评论 ·
6 收藏

Golang 实现一个简单的 RPC 服务

分享一个简单的 rpc 服务框架。
原创
发布博客 2024.04.09 ·
637 阅读 ·
4 点赞 ·
0 评论 ·
1 收藏

手把手教你搭建基于 Go kit 的 Http 微服务

实现一个简单的功能:通过http请求用户的uid,返回用户uid对应的name,age和level。Endpoint层主要负责Request/Response格式的转换,以及公用拦截器相关的逻辑。Transport层主要负责与传输协议HTTP,GRPC,THRIFT等相关的逻辑。Service层则专注于业务逻辑,就是我们的业务类、接口等相关信息存放。
原创
发布博客 2024.04.09 ·
761 阅读 ·
17 点赞 ·
0 评论 ·
6 收藏

Golang 为什么要使用接口

因为json、CSV都有一个步骤,就是读取,这样可以把这个步骤抽象出来(都属于一种Reader类型),这样就可以写出更方便和更通用的函数。上面这个例子中,重点关注的是 processFile 这个函数,它实现了不管什么类型(json、CSV)的文件,都可以处理。下面举一个例子,比如我想实现一个通用的函数,能够支持json、CSV文件的读取。这说明接口一个很重要的特点就是抽象,把不同类型的相同特点进行抽象统一。一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口。
原创
发布博客 2024.04.08 ·
406 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

Golang 为什么需要用反射

比如现在我想实现一个通用的db插入函数,支持我传入所有类型的struct,每一种类型的struct是一个单独的表,以struct的名称作为表名,然后插入到不同的表中。本质上是可以动态获取程序运行时的变量(类型)
原创
发布博客 2024.04.08 ·
480 阅读 ·
4 点赞 ·
0 评论 ·
1 收藏

Golang sync.Once 的作用

sync.Once的作用正是为了防止在多goroutine并发执行时,对某个操作进行重复的初始化。它确保即使在高度并发的场景下,某些高成本的初始化操作(比如创建资源、加载配置、设置全局状态等)也只会被执行一次。
原创
发布博客 2024.04.08 ·
503 阅读 ·
3 点赞 ·
0 评论 ·
1 收藏

Golang 基于共享变量的并发锁

原理:RWMutex允许多个goroutine同时获取读锁(RLock),进行并发读操作,而写锁(Lock)则是互斥的,同一时间只允许一个goroutine进行写操作。这意味着,一旦有goroutine开始写操作,其他想要读取或写入的goroutine都必须等待,直到写操作完成并且写锁被释放。RWMutex,即读写互斥锁,适用于读操作远远多于写操作的场景,当多个goroutine需要频繁地读取某个共享资源,而写入操作相对较少时,使用RWMutex可以提高并发性能。
原创
发布博客 2024.04.08 ·
1010 阅读 ·
26 点赞 ·
0 评论 ·
10 收藏

理解 Golang 变量在内存分配中的规则

堆:大的局部变量,函数内部产生逃逸的变量,动态分配的数据,全局变量和静态变量。为什么有些变量在堆中分配、有些却在栈中分配?栈:函数局部变量,小数据。
原创
发布博客 2024.04.07 ·
554 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

Golang 创建一个简单的内存池

内存池主要作用是减少内存分配和释放的开销,提高程序的性能和效率。这样,当程序需要分配内存时,可以直接从内存池中获取一块已经分配好的内存,而不是每次都从操作系统申请新的内存。内存池可以设计为线程安全的,这样在多线程或多Goroutine的环境中,可以并发地从内存池中分配和释放内存,而不需要额外的同步操作。通过减少内存分配和释放的次数,内存池有助于降低垃圾回收器的工作负担,从而提高程序的运行效率。内存池可以减少内存碎片,因为内存池中的内存块是预先分配的,这样可以更有效地利用内存。
原创
发布博客 2024.04.07 ·
574 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

为什么要在 Golang 中使用指针

相反,你可以使用指针来传递文件内容的引用,这样可以避免复制整个文件内容,并允许多个 Goroutines 同时处理同一个文件。当你有一个大型的数据结构时,如果直接传递这个数据结构,会产生一个完整的副本,这会增加内存的使用和CPU的计算时间。使用指针,你可以只传递数据的地址,这样函数就可以直接在原始数据上操作,避免了复制的开销。如果你希望函数的修改反映到原始变量上,你需要传递变量的指针,这样函数就可以直接修改原始数据。如果你直接传递配置对象,那么函数内部修改的是对象的副本,并不会影响原始的全局配置。
原创
发布博客 2024.04.07 ·
743 阅读 ·
11 点赞 ·
0 评论 ·
6 收藏

GitLab 新项目创建和使用

如果提示已经生成后,可以忽略。然后用文件编辑器打开对应的目录的 id_rsa.pub 文件,将内容复制到 gitlab -> Setting -> SSH Keys 添加即可。下面的信息可以登录gitlab查看。
原创
发布博客 2024.04.03 ·
1141 阅读 ·
5 点赞 ·
0 评论 ·
5 收藏

PhpSpreadsheet 读取 excel 里面的图片

使用 phpSpreadSheet 插件去读取 excel 里面的图片时发现坑点很多,这里做一个总结。这里会把excel里面的图片读取,然后存放到服务器指定的目录。解决方案:不要使用.xls格式的excel,使用.xlsx。在composer.json配置。我使用的是 tp 框架。composer安装。
原创
发布博客 2024.03.21 ·
1245 阅读 ·
7 点赞 ·
2 评论 ·
6 收藏

Golang 方法的接收器 receiver 指针和值的区别

在 Go 语言中,如果一个方法的 receiver 是某个类型的指针,那么该类型的值和指针都可以调用这个方法。这是因为当 receiver 是指针类型时,Go 会自动进行指针解引用,以便让你方便地对这个类型的值进行操作。incr 方法的 receiver 是 Count 类型的指针。因此,既可以使用 Count 类型的值,也可以使用指向 Count 类型的指针来调用 incr 方法。
原创
发布博客 2024.03.07 ·
524 阅读 ·
4 点赞 ·
0 评论 ·
0 收藏

Golang 写日志到文件

os.O_EXCL: 与O_CREATE一起使用时,要求文件必须是新创建的,如果文件已经存在则返回错误。os.O_TRUNC: 如果可能,打开文件时先将文件内容清空。os.O_CREATE: 如果文件不存在则创建新文件。os.O_RDONLY: 以只读方式打开文件。os.O_WRONLY: 以只写方式打开文件。os.O_APPEND: 在文件末尾追加数据。os.O_SYNC: 打开文件用于同步I/O。os.O_RDWR: 以读写方式打开文件。
原创
发布博客 2024.03.07 ·
841 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

Golang 常用的时间转换

注意,这个时间2006-01-02 15:04:05完全不能改,是一个固定的时间(我不理解)Go 1.20之后增加的三个常量。
原创
发布博客 2024.03.06 ·
1031 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

什么是 Golang 类型断言

在这里,areaIntf被赋值为sq1,而sq1是一个*Square类型的指针。因此,areaIntf包含了*Square类型的值,所以类型断言(areaIntf.(*Square))会返回一个非nil的*Square类型的指针,并且ok的值为true,表示类型断言成功。在Go语言中,类型断言返回两个值:转换后的值和一个布尔值,表示转换是否成功。类型断言:用于检查某个接口是否包含某个具体类型,语法x.(T),x是一个接口类型表达式,T是具体的类型,如果x包含的值可以被转换成T类型,则是ok。
原创
发布博客 2024.03.06 ·
398 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏
加载更多