
学习日记
文章平均质量分 84
初学编程,掌握知识的最好方法就是讲授给别人,欢迎观看我的学习日记,如有错误欢迎指正,谢谢。
留乘船
以脚踏实地为基,寻突破自我之路。专注后端和运维!
展开
-
使用gin -gorm-jwt-中间件拦截的一个小项目
这个项目主要使用了gin+gorm+jwt实现的登录注册功能,另外还通过定义中间件的方式,实现了对请求进行权限校验后放行的功能。非常适合练手。如果有新的想法也欢迎来我评论区分享一下。目录:config/app.yml2.helper目录helper/helper.go3.middlewares目录middlewares/auth_admin.go4.models目录models/init.gomodels/UserBasic.go5.routerrouter/app.go6.Serv原创 2024-11-19 23:31:32 · 597 阅读 · 0 评论 -
golang创建式设计模式---工厂模式
工厂模式(Factory Method Pattern)是一种设计模式,旨在创建对象时,将对象的创建与使用进行分离。通过定义一个工厂类,这个类具有创建不同具体产品对象的方法。用户只需与工厂类交互,告诉工厂自己想要什么类型的产品,工厂就会负责创建并返回相应的产品对象。这样做的好处是使得系统的架构更加清晰、灵活,方便扩展和维护产品的种类,同时也降低了代码之间耦合度。简单来说,就是有个专门负责生产对象的“地方”,根据需求生产出对应的对象。其uml类图由图可知,工厂方法模式的角色组成如下。原创 2024-05-19 17:13:56 · 1375 阅读 · 2 评论 -
基于gin框架的文件上传(逐行解析)
记录一下使用gin框架完成一个文件上传的功能,一下是实现该功能的代码,适合小白,代码都有逐行解释!后续使用postman提交一个文件参数进行测试原创 2024-05-12 09:55:04 · 550 阅读 · 0 评论 -
如何在postman上提交文件格式的数据
今天在写一个文件上传的功能接口时,想用postman进行提交,花了些时间才找到在postman提交文件格式的数据。1.打开postman,选择POST提交方式,然后在Params那一行的Headers字段中添加。选择文件类型在KEY字段的那一行的右下角进行选择,如图。字段的那一行的右下角进行选择,如图。2.在Body字段上添加。原创 2024-05-02 22:46:39 · 1154 阅读 · 0 评论 -
strcov的常用方法
strconv是 Go 语言标准库中的一个包,用于进行基本数据类型和字符串之间的转换。以下是strconvAtoi和ItoaAtoi函数用于将字符串转换为整数类型,Itoa函数则用于将整数类型转换为字符串类型。Parse系列函数:包括ParseIntParseBool和ParseFloat等函数,用于将字符串解析为指定类型的值。Format系列函数:包括FormatIntFormatBool和等函数,用于将基本数据类型转换为字符串类型。Append系列函数:包括AppendIntAppendBool。原创 2024-05-01 21:06:42 · 428 阅读 · 0 评论 -
gin框架学习
一个go语言的web框架Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。import ("fmt""net/http""time"name, ok := c.Get("name") //跨中间件取值if!ok {name = "匿名用户"})// 定义一个中间件,统计处理函数的耗时//计时c.Next() //调用后续的处理函数。原创 2024-02-03 18:56:54 · 1088 阅读 · 0 评论 -
基于go语言开发的海量用户及时通讯系统
这是一个基于go语言的海量用户通讯系统,也是在学习golang的过程中必须做的一个项目。下面我将我完成这个项目的步骤分享给大家!!原创 2023-12-17 11:16:54 · 572 阅读 · 0 评论 -
go学习redis的学习与使用
1).Redis是NoSQL数据库,不是传统的关系型数据库官网: http://redis.io/ 和http://www.redis.cn/2).Redis:REmote DIctionary Server(远程字典服务器),Redis的性能非常高,单机可以达到15W gps.通常适合做缓存,也可以持久化3)是完全开源免费的,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化Nosql数据库,是最热门的NoSql数据库之一,也称为数据结构服务器。原创 2023-12-16 22:45:12 · 379 阅读 · 0 评论 -
go学习之网络编程
Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关重要的一部分网络编程有两种1)TCP socket编程,是网络编程的主流。之所以交TCP socket编程,是因为底层是基于Tcp/ip协议的,比如QQ聊天2)b/s结构的http编程。我们使用浏览器去访问服务器时,使用的就是http协议,而http底层依旧是tcp socke实现的,比如京东商城(这属于go web开发范畴)原创 2023-12-14 22:27:16 · 767 阅读 · 1 评论 -
go学习之反射知识
1)反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind)2)如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法)3)通过反射,可以修改变量的值,可以调用关联的方法4)使用反射,需要import (“reflect”)原创 2023-12-12 22:16:11 · 390 阅读 · 0 评论 -
go学习之goroutine和channel
1)进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位2)线程是进程的一个执行实例吗,是程序执行的最小单位,他是比进程更小的能独立运行的基本单位3)一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行4)一个程序至少有一个进程,一个进程至少有一个线程1)M:操作系统的主线程(是物理线程)2)P:协程执行需要的是上下文3)G:协程1)channel本质就是一个数据结构-队列2)数据是先进先出[FIFIO frist in first out]原创 2023-12-02 13:29:39 · 590 阅读 · 2 评论 -
go学习之json和单元测试知识
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。key-valJSON是2001年开始推广使用的数据格式,目前已成为主流的数据格式JSON易于机器解析和生成,并有效地提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串时,在反序列化恢复成原来的数据类型(结构体、map等)。这种方式已然成为各个语言的标准。原创 2023-11-30 23:09:45 · 500 阅读 · 0 评论 -
go学习之文件操作与命令行参数
文件对于我们并不陌生,文件是数据源(保存数据的地方)一种,比如大家经常使用的word文件,txt文件,excel文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频声音文件在程序中是以流的形式来操作的流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径os.File结构体封装所有文件相关操作。原创 2023-11-29 22:44:03 · 570 阅读 · 2 评论 -
go学习之简单项目
把记账软件的功能封装到一个结构体中,然后调用该结构体的方法来实现记账,显示明细就可以了,结构体的名字为FamilyAccount。y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n。编写customerView.go另外可以把customer.go和customerDervice.go协商。需要编写CustomerView和customerService,Customer类。2.当没有任何收支明细时,提示“当前没有收支明细。思路分析:给出的界面完成,主菜单的显示,当用户输入4的时候就退出。原创 2023-11-19 19:11:22 · 522 阅读 · 1 评论 -
go学习之接口知识
interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量,到某个自定义类型(比如结构体Phone)要使用的时候,再根据具体情况把这些方法写出来对初学者讲,理解接口不算太难,难的是不知道什么时候使用接口,下面几个例子来解释1)现在美国要制造轰炸机,武装直升机,专家只需要把飞机需要的功能/规格定下来即可,然后让别人具体实现即可2)就是做一个项目,在接口中定义规范让其他人去实现所定的规范变量(实例)具有多种形态。原创 2023-11-12 20:13:11 · 544 阅读 · 0 评论 -
go的面向对象学习
在某些情况下,我们需要声明(定义)方法,比如Person结构体,除了有一些字段外(年龄,姓名…)Person结构体还有一些行为比如:可以说话、跑步。。通过学习,还可以做算术题,这时要使用方法才可以完成Golang中的方法是作用在指定的数据类型上的(即。和指定的数据类型绑定)因此自定义类型都可以有方法,而不仅仅是structtest方法和Person类型绑定test方法只能通过Person类型的变量来调用,而不能直接调用,也不能使用其他类型变量来调用下面的使用方式都是错误的dog.test()原创 2023-10-06 15:29:32 · 495 阅读 · 2 评论 -
go学习之数组与Map
数组的定义var 数组名[数组大小] 数据类型赋初值 a[0]=1 a[1]=30 ...数组内存(重要)//当我们定义完数组后,数组的各个元素有默认值0fmt.Printf("数组的地址是:%p",&intArr)//数组的地址是:0xc0420082c0fmt.Printf("数组首地址是:%p",&intArr[0])////数组的首地址是:0xc0420082c0数组的地址可以通过数组名来获取:&intArr数组的第一个元素的地址就是数组的首地址。原创 2023-09-23 10:57:25 · 548 阅读 · 0 评论 -
go学习之函数知识
完成一个需求:输入两个数,再输入一个运算符(±*/),得到结果使用传统方法:分析代码上的问题:为完成某一个功能的程序指令(语句)的集合,称为函数在Go中,函数分为:自定义函数、系统函数(查看GO编程手册)函数基本语法:1)形参列表:表示函数的输入2)函数中的语句:表示为了实现某一个功能的代码块3)函数可以有返回值,也可以没有案例入门:2.包为什么要用包1)在实际的开发中,我们往往需要在不同的文件中,去调用其他文件的定义的函数,比如main.go中,去使用utils.go文件中的函数,如何实现?2)现原创 2023-09-19 20:13:13 · 844 阅读 · 0 评论 -
go学习之流程控制语句
在程序中,程序运行的流程控制决定程序如何执行的,是我们应该掌握的,主要有三大流程控制语句。原创 2023-08-27 22:22:03 · 980 阅读 · 0 评论 -
go学习-指针 标识符
1)基本数据类型,变量存的值,也叫值类型2)获取变量的地址用&,比如 var num int ,获取num的地址:&num3)指针类型,变量存的是一个地址,这个地址指向的空间存的才是真正值,比如: var ptr *int =&num4)获取指针类型所指的值,使用*,比如:var *ptr int,使用 *ptr获取p指向的值5)举例说明import("fmt"//演示golang中的指针类型//基本数据在内存的布局// i的地址是多少 &i。原创 2023-08-26 17:21:10 · 462 阅读 · 0 评论 -
go语言学习之有关变量的知识
在程序开发中,我们经常将基本数据类型转换成string或者将string转换为基本数据类型基本类型转为string类型方式1:fmt,Sprintf(“%参数”,表达式)//是用第一种方式来转换 fmt.Sprint()str = fmt.Sprintf("%d",num1) //num1转化为stringfmt.Printf("str type %T str=%v\n",str,str) //结果为string 和99Sprint根据format参数生成格式化的字符串并返回该字符串。原创 2023-08-25 21:20:27 · 907 阅读 · 0 评论 -
go学习之go的语法知识
go支持C语言风格的/* */块注释,也支持C++风格的//注释,行注释更通用,块注释主要针对包的详情说明或者屏蔽大块的代码。4)go方法、一由条条语句构成,每个语句后不需要分号(go语言会在每行后自动加上分号),这也体现出go语言的简洁性。5)go编译是一行一行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一行,否则会报错。Path:指令 sdk:bin目录 go.exe godoc.exe gofmt.exe。SDK就是啊软件开发工具包,我们做go开发,首先需要安装并配置好‘go。原创 2023-08-24 22:25:36 · 632 阅读 · 0 评论 -
go学习一之go的初体验
通过运行进行对比前者执行速度更快,后者执行速度更慢,因为前面是直接运行二进制语言,后面还要先进行编译成二进制的语言再执行,实际的开发中还是先进行编译成二进制文件。注意:通过go run 命令可以直接运行hello,go程序(类似于执行一个脚本的文件的形式)在真实的生产环境会先编译再去运行go程序。2)如果我们是直接go run go源代码,那么要在另一台机器上运行,也需要go开发环境,否则无法运行。表示该hello.go文件所在的包是main,在go中每一个文件都要归属于一个包。原创 2023-08-23 23:42:19 · 487 阅读 · 0 评论 -
linux shell脚本学习
Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。在脚本中,您会不会奇怪,哪里来的$1和$2,这其实就是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shell脚本的预设变量是没有限制的,这回您明白了吧。实际上,shell脚本在执行的时候后边是可以跟参数的,而且还可以跟多个。上面的结构中,不限制value的个数,*则代表除了上面的value外的其他值。原创 2023-01-23 12:24:18 · 12895 阅读 · 10 评论 -
手把手教你搭建K8S集群
集群中,也可以对容器应用进行排错,还能管理集群本身及其附属资源。首先创建三台centos7的虚拟机,装虚拟机的话大家可以参照网上资料,非常容易。在各主机上进行时钟同步,时钟同步服务器可自行配置,此处选择阿里云的时钟服务器。好了,k8s平台就搭建好了,能看到这,我就很欣慰了搭建过程有点长。若下面有的源已配置,则可以略过相应的操作!查看当前系统的内核版本,以及主机名是否符合配置要求管理节点。获取运行在集群中的应用的概览信息,也可以创建或者修改。由于默认的镜像仓库在国外可能无法访问,因此修改。原创 2022-11-20 00:15:43 · 1987 阅读 · 0 评论 -
一个冒泡排序引发的思考
正如这部分关于冒泡排序的代码当我封装成maopaos(int arr[],int len)函数的时候,我总觉的两个参数很麻烦。当我写好冒泡排序的相关代码,准备将它封装成一个函数的时候,那括号里面的参数引起了我深深的思考。这就说明了**suzu(int arr[])**中的arr的确是一个存放地址的变量。2.所谓引用传递即是:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值)所谓引用传递即是:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值)显然函数内的数组长度是不对的。..原创 2022-08-15 23:25:28 · 216 阅读 · 0 评论 -
java设计模式之---单例模式
单例模式指的是:保证类在内存中只有一个实例对象。原创 2022-08-10 23:49:44 · 398 阅读 · 0 评论 -
重温C语言10---预处理与宏定义
1.在使用空函数之前,应该用#include引入对应的头文件。这种以**#号开头的命令称为预处理命令**-2.这些在编译之前对源文件进行简单加工的过程,称为预处理(即预先处理、提前处理)-3.预处理主要是处理以#开头的命令,例如**#include **等。预处理命令要放在所有函数之外,而且一般都放在源文件的前面-4.预处理是C语言的一个重要功能,由预处理程序完成。当对源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理。处理完毕自动进入对源程序的编译。...原创 2022-08-08 23:10:35 · 943 阅读 · 0 评论 -
教你使用java彻底掌握 “约瑟夫环”
。原创 2022-08-05 15:54:06 · 1544 阅读 · 0 评论 -
IOC思想的开窍之路
大家好,最近小编我深入的对java进行学习。从类,接口,对象到现在接触spring技术。对于spring的理解可谓是一波三折,对于spring的入门思想IOC我也是昨天才开了窍。说到IOC(控制反转)我从字面上理解就是你控制了某个事物然后那个事物又反转过来控制了你。那这种思想的目的是什么?为什么要这样做?我在网上查过各种资料,对于ioc理解大多是晦涩难懂的,像IOC容器对象托管之类的。找到最多的一句话就是:使用ioc技术在写java程序可以不用去new对象而是自动创建对象,然后就原创 2022-05-30 23:18:55 · 260 阅读 · 1 评论 -
关于硬盘这些事
最近船哥正在为电脑存储不够而发愁,导致我储存不够的最主要的原因便是那贪婪的vmare和里面的虚拟机了。在搭建几个容器平台之后就占了我100多G的空间了。 正当我在思索着砍下我这个月三分之一的生活费去买一块高读写的移动固态硬盘时,殊不知朋友发来一条拼多多现金大转盘的链接点开之后一股金钱的味道袭来!距离500元现金体现只剩最后0.01元让我很是苦恼,虽然我知道这东西概率极低,但是朋友一张100元到账截图激励了我。那一刻我四处转发着那条及其重要转载 2022-05-20 21:36:25 · 277 阅读 · 0 评论 -
java链表的复习
大家好,在java当中,链表是一种重要的数据结构。笔者身边的朋友对于链表有种莫名的恐惧,因为链表这个知识与C语言的指针是一脉相承的,而指针这个知识又是比较抽象懂的,在java中的数据结构当中链表可以说就是通过指针实现的,但是java中链表相对于C语言又有很大的不同。在C语言当中,指针往往与地址挂钩,但是在Java链表中却没有通过抽象的地址而是通过调用一个一个节点来使用。对于链表我相信你在现实生活中一定用过,像我们在QQ音乐里面的歌单,当你在网上搜到几条好听听的歌,这是你可能会通过“添加到下一首”这...原创 2021-11-30 00:32:07 · 170 阅读 · 1 评论 -
先行遍历与二分法
大家好!对于数组,相信大家在学C语言和java时都必须学的数据结构吧,对于数组,我对他的理解就是一个盒子,而在这个盒子里面装了许多东西。不过在这个盒子当中东西可不是乱装的,他们都是一个一个按照顺序装进去。那么当我们想要在这个数组当中找出某个元素时我们该怎么办呢?今天,我来给大家介绍两种有名的方法:线性遍历法:对于,线性遍历法,其实就是枚举法(上代码):package ShuZu;public class XianSearch { public static void main(...原创 2021-11-27 00:49:01 · 501 阅读 · 0 评论