自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 第五章InnoDB数据页结构

一个页的大小一般是。

2024-05-04 19:18:46 827

原创 层次分析法

评价类问题可以用打分解决定义指标,权重的和为1只要看到。

2024-05-03 11:11:53 426

原创 第三章 乱码的前世今生-字符集和比较规则

需要解决两个问题:界定清楚字符范围,需要哪些字符将一个字符映射成一个二进制数据的过程也叫做编码,将一个二进制数据映射到一个字符的过程叫做解码同一个字符集可以有多种比较规则比如说二进制规则就是两个字符对应的二进制编码进行比较一些重要的字符集ASCII字符集:收录128个字符,包括空格,标点字符,数字,大小写字母和一些不可见字符GB2312字符集:兼容ASCII字符集,以及收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。如果字符在ASCII字符集中,采用1字节编码。

2024-04-30 14:19:40 676

原创 第2章 MySQL的调控按钮-启动选项和系统变量

因为多个客户端可以同时连接到一个服务器程序,所以对于同一个系统变量,不同的客户端需要具有不同的值,这是很正常的事情。客户端设置了global的系统变量,并不会对已经连接上的客户端的系统变量产生影响,只会对后面连接的客户端产生影响。如果你和我一样启动不了,去计算机管理,点击服务,找到mysql80,右击启动就行,然后会发现,修改成功了。是用来显示服务器程序的运行状况的,所以他们的值只能由服务器程序自己来设置,程序员是不能设置的。如果我们在多个配置文件中设置了相同的启动选项,就医最后一个配置文件中的为准。

2024-04-30 14:16:39 842 1

原创 第一章——小白入门

但是当客户端断开连接,服务器并不会丢弃这个线程,而是将这个线程 缓存起来,当下一个客户端连接的时候,使用这个缓存的线程。语法解析之后,面对我们写的mysql语句执行效率不会太高的问题,mysql的优化程序会对我们的语句进行一些优化,优化 的结果就是生成一个执行计划。维护缓存需要造成开销,比如每次都要去查询缓存中的检索,然后又要更新这个缓存,维护该缓存对应的缓存区域。Mysql提供了各式各样的存储引擎,不同的存储引擎管理的存储结构可能不同,采用的存取算法也可能不同。客户端需要提供主机信息 ,用户名,密码。

2024-04-30 14:15:34 784

原创 slice

因为slice值包含指向第一个sllice元素的指针,传入的slice允许在函数内部修改底层数组的元素。slice不能比较,数组可以比较:数组的类型和数值都相同的时候才可以相等。一个零值的slice等于nil,一个nil值的slice并没有底层数组。一个nil值的slice的行为和其他任意0长度的slice是一样的。为什么向函数传递slice允许在函数内部修改底层数组的元素?复制的slice只是对底层的数组创建了一个新的slice别名。slice顶部位置对应slice的最后一个位置。

2024-04-28 09:44:13 155

原创 Map....

这是因为map可能随着元素数量增长而重新分配更大的内存空间,从而导致之前的地址无效。和slice一样,map之间不能进行相等比较,唯一的例外是和nil进行比较。map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。map中的元素并不是一个变量,所以我们不能对map中的元素进行取址操作。map中的元素不是一个变量,我们不要能对它进行取址操作。如果key不存在,得到value对应类型的零值。如果key存在,得到key对应的value。使用内置的delete函数可以删除元素。

2024-04-28 09:41:24 143

原创 结构体..

set不包含键值对,而且每个值在set中都是唯一的,set的主要目的是知道这个元素是不是这个集合的一部分。一个命名为s的结构体不能包含s类型的成员,但能包含*s指针类型的成员,这可以让我们创建递归的数据类型。有些时候我们会嵌入匿名结构体的原因是此结构体中的方法我们可以使用。如果考虑效率的话,较大的结构体通常会用指针的方式传入和返回。如果结构体的成员是可以比较的,那么结构体也是可以直接比较的。如果要在函数内部修改结构体成员,用指针传入是必须的。

2024-04-28 09:40:43 117

原创 Json(标题)

将结构体转变为Json的过程叫编组,编组是通过json.Marshal函数完成的。json的对象类型可以用于编码Go语言中的map类型和结构体。Go语言对这些标准格式和编码都有良好的支持。json可以表示字符串,数字,布尔值和对象。类似的还有XML,ASN.1。是和在编译阶段关联到该成员的。

2024-04-28 09:39:35 319

原创 文本和HTML模板

这里是将Title作为prinf的参数,基于fmt.Sprintf实现的内置函数。可以简化这个err的处理,使用这个函数可以不需要管返回的err。模板语言里包含通过选择的结构体的成员,调用函数或方法。操作符表示将前一个表达式的结果作为后一个函数的输入。一个模板可能是一个文件或者是一个字符串。对于action部分将触发其他的行为。前面是输入的参数,后面是输出。是一个或多个由双括号组成的。我们呢来通过这个模板来分析。它接受一个模板和一个err。第一行是打印匹配到的总数。对应一个循环action。

2024-04-28 09:36:45 169

原创 函数(仅仅是将自己不会的写上去)

对squares的一次调用会生成一个局部变量x并返回一个匿名函数,中间的过程我们对外部的x进行了访问。函数值不仅仅是一串代码,还记录了状态。所以说函数值属于引用类型。函数值也就不可以比较了。我们将函数值成为闭包。

2024-04-28 09:36:04 75

原创 第二章 程序结构

抛开技术问题不说,基本的实现思路是,从每个包级的变量和每个当前运行函数的每一个局部变量开始,通过指针的访问路径遍历,是否能找到该变量。如果不存在这样的访问路径,说明该变量不可达,这样的变量也就没有存在的意义。指针是实现flag包的关键技术,它使用命令行参数来设置对应变量 的值,而这些命令行的标志参数可能会零散分布在整个程序中。新命名类型提供了一个方法,用来分割不同概念的类型,即使他们呢底层类型相同也是不兼容的。如果将指针作为参数调用函数,可以在函数中通过该指针来更新变量的值。通过指针来更新变量的值。

2024-04-28 09:34:22 211

原创 第一章 入门

go的指针没有指针运算,不能进行加减操作,这是指指针本身的地址值,不是*px := 1p := &x*p = 2。

2024-04-28 09:33:29 246

原创 panic

panic异常发生的时候,程序会中断运行,并立即执行该goroutine中的defer函数。对于大部分漏洞,应尽量避免程序的崩溃,直接使用err(go提供的错误机制)panic函数接受任何值作为参数。

2024-04-28 09:32:05 83

原创 Recover捕获异常

我们很难完全遵守规范,在net/http包中提供的web服务器,我们不应该因为一个handler函数的问题而终止整个gorouitne,这里我们需要使用recover。下面这个函数中,如果某个异常出现,我们不会选择让解析器崩溃,而是将panic异常当作普通的解析错误,并附加额外消息提醒用户报告此错误。我们观察上面的defer函数,p是recover的错误信息,我们将panic value添加到了err中。在panic后面,我们无法保证包级变量的状态仍然和我们预期一致。我们需要有选择性的recover。

2024-04-28 09:31:05 156

原创 go圣经 ——方法

在第二组代码中我们将这两个变量联合起来变成了一个有mutex方法的 结构体变量,这是一个匿名的struct,同时我们又能使用mapping这个变量,使得结构更加统一。方法是与结构体相关联的函数,它允许我们从Rect类型的实例中选择并计算其面积。这里只是记录了自己学过一遍但是在圣经(狼吞虎咽)中又看到的新鲜玩意。比如都有max方法在Point和RGBA中,就会报错。我们的选择器可以不需要接收器就可以被调用。选择器中有多个同名的方法会报错。省略了上面的匿名函数。

2024-04-28 09:29:53 377

原创 【无标题】

我们再继续细说比较的问题: 如果两个接口值的动态类型相同,但是这个动态类型是不可比较的(比如切片),如果对他们进行比较就会panic。这个语法实际上是在编译器的时候,我们并不知道接口值的动态类型是什么,所以一个接口上的调用必须使用动态分配。其次,当我声明一个接口变量的时候,我实际上是在声明一个可以持有任何实现了该接口的具体类型的变量。一个接口的值由两个部分组成,一个是具体的类型,另一个是那个类型的值,我们称他们两者分别为。在接口值和nil进行比较的时候,需要动态类型和接口值都等于nil。

2024-04-28 09:28:19 260

原创 07 Profile Page and Avatar

我目前感受这个项目的强度对我来说还是比较友好的,然后大家一定要拿一个笔记本在打完代码之后在重新看一遍,第二遍其实会比第一个的效果好很多,因为第一遍忙着抄代码,脑子有点过不来。在registerRouter中,使用mux.NewRouter()创建了一个新的路由器,这种改进方式提供了更丰富的功能和更灵活的路由匹配方式。我们需要允许用户更改自己的用户名,并且些一些个人介绍,这些将存储在User对象中的about_me的字段。新建一个视图函数,还是一个vm加一个page再加一个controller。

2024-04-09 17:07:31 196

原创 06-User Login

我们通常登录微博的时候会使用账号密码,登陆成功之后,我们会进入一个新的页面,在新的页面背后有无数个新的页面,那么浏览器怎么会知道我们是这个账号的主人呢,如果光靠HTTP是完成不了的,因为HTTP不会记录这个信息,HTTP无状态,这个时候我们需要在服务器或客户端保存一些类似的可以代表身份的信息。我们需要设置一个中间件来保证在访问主页的时候,是有账号的才能进去,不然直接就进去主页了,不合规范。GetVm一般是获取虚拟机的意思,我们这里一般是指将这个东西注册一下,初始化,得到数据。

2024-04-07 18:18:29 236

原创 Database

然后我们引入了一个viper的包,viper是一个Go语言库,用于处理配置文件的工具,用来解析和使用配置文件。YAML 支持多种数据类型,包括字符串、整数、浮点数、布尔值、列表、字典等,以及特殊值如 null。user_id,这个是个链接,用来得到作者的id,是一个外键,每发一个动态都会链接到这个作者。列表使用连字符(减号)表示,每个元素占一行,位于连字符后面并缩进一个空格。字典使用冒号分隔键值对,每个键值对占一行,键值对之间缩进一个空格。一个用户可以发多条动态,所以这是一个一对多的关系。

2024-04-07 18:17:35 401

原创 Web Form

从这网站学的随着我们项目的扩大,代码量会愈来愈多,我们需要建立这样的数据结构来使整个项目看起来没有那么臃肿package model - 负责数据建模vm - View Model,定义各种结构体来表示不同的视图模型controller - http路由,就是对各个uri进行处理的函数,引用model包中的数据模型来执行业务逻辑,并使用vm包中的视图模型来准备数据以供渲染页面使用g.go 负责存放该package的全局变量以及init函数我直接开了一个新的文件夹来存放着一章的教程。

2024-04-07 18:16:55 306

原创 Web Form

从这网站学的随着我们项目的扩大,代码量会愈来愈多,我们需要建立这样的数据结构来使整个项目看起来没有那么臃肿package model - 负责数据建模vm - View Model,定义各种结构体来表示不同的视图模型controller - http路由,就是对各个uri进行处理的函数,引用model包中的数据模型来执行业务逻辑,并使用vm包中的视图模型来准备数据以供渲染页面使用g.go 负责存放该package的全局变量以及init函数我直接开了一个新的文件夹来存放着一章的教程。

2024-04-05 11:10:48 493

原创 Template Advance

基础模板和功能模板,大概意思就是基础模板就是每个模块都会出现的字段,功能模板就是对于某个模块专门写的。所以我们将基础模板分离成一个单独文件,功能模板写成一个文件,然后我们需要编写一个函数遍历功能模块。本章将讨论 Go 的组合特性,以及 建立一个通用的调用 模板的方法。好的,出现了一个从没学过的东西。这个是原网站,我是在这里学的。我们首先解析一下这个文档。

2024-04-04 19:22:49 187

原创 Template Basic

本系列均参考只是为了监督自己写的博客这里就不介绍什么是模板了,一般来说,我们使用html文件作为我们的模板文件我们首先创建一个类似于这样的模板如果对不是很熟悉,可以看一下,我们后端的只要能大概看得懂HTML就可以了之后我们建立一个文件夹,将静态文件都放到这个文件夹中将模板的内容移到 static文件夹下然后我们的main文件就变成了下面这个样子之后我们需要学习有关。

2024-04-04 17:22:38 392

原创 1.Git是用来干嘛的

Git就是一个文件管理系统,这样说吧,当多个人同时在操作一个文件的同时,很容易造成紊乱,git就是保证文件不紊乱产生的包括集中式管理系统和分布式管理系统听懂了,集中式管理系统就是从中央服务器上下载最新的版本文件,修改文件之后将 文件上传到中央管理系统,然后中央管理系统得到你更改之后的文件缺点:中央服务器出现问题所有人都无法工作都有一个完整的版本库,不需要网络就可以直接在本地修改当需要把文件分享给其他人的时候,只需要把仓库互相同步一下就行了git就是分布式的。

2024-04-02 13:39:55 1065

原创 如何将本地仓库放到远程仓库中

仓库的名称和分支的名称可以省略,省略的话就是直接拉取远程仓库的main分支,拉取到本地,在进行合并。然后我在github上面写了一个ReadMe的文件,我们应该怎么样才能将这个文件返回到本地?如果我们本地的文件与github上面有冲突,还需要进行拉扯,这个后面会有讲解。最后一行就是将我们本地的main分支和我们远程的main分支关联起来。可以看到我们的README文件已经被拉取了。shortname就是我们远程仓库的别名。这个命令查看一下目前远程仓库的别名和地址。在我们仓库创建好之后,我们复制好ssh。

2024-04-02 13:36:19 333

原创 1.Git是用来干嘛的

本文章学习于【GeekHour】一小时Git教程,来自bilibiliGit就是一个文件管理系统,这样说吧,当多个人同时在操作一个文件的同时,很容易造成紊乱,git就是保证文件不紊乱产生的包括集中式管理系统和分布式管理系统听懂了,集中式管理系统就是从中央服务器上下载最新的版本文件,修改文件之后将 文件上传到中央管理系统,然后中央管理系统得到你更改之后的文件缺点:中央服务器出现问题所有人都无法工作都有一个完整的版本库,不需要网络就可以直接在本地修改。

2024-04-02 13:12:57 1157

原创 day4|gin的中间件和路由分组

之后我们再来看Use方法,用来使用中间件。中间件还有一种调用方式,链式调用方式。在.use就可以调用中间件函数。中间件其实是一个方法,和洋葱中间件是差不多的。

2024-04-02 13:08:23 677

原创 day3| 从socket部分继续学习

首先需要了解下列知识:WebSocket 是一种在单个 TCP 连接上提供全双工通信的网络协议。它可以让客户端和服务器之间进行双向通信,而无需通过 HTTP 请求和响应。WebSocket 通信始于一个 HTTP 握手过程,客户端发起 WebSocket 握手请求,服务器接受并响应这个请求,然后建立起 WebSocket 连接。握手过程通常发生在 HTTP/HTTPS 的特定端点上,例如 "/ws" 或 "/websocket"。WebSocket 数据通过帧进行传输,每个帧代表了一个消息的一部分。

2024-04-02 13:07:35 642

原创 day 2从Mutex继续开始

这些接口在 Go 的 I/O 操作中非常重要,它们允许不同的数据源、数据目标和资源以统一的方式进行操作,提供了灵活性和可扩展性。通过使用这些接口,你可以编写通用的 I/O 操作函数,而不依赖于特定的 I/O 类型,从而提高代码的可重用性和灵活性。本地调用远程方法,允许一个程序调用另一个程序定义的函数或方法,这些函数或方法可能在不同的计算机上进行,RPC通过网络调用另一个程序中的函数。sync.Map是并发安全的,即使两个goroutine同时对其进行读写操作,也能保证它的安全,读写是分开进行的。

2024-04-02 12:55:12 261

原创 day 1 将go基础知识复习一下

本文章主要是写自己在做这个项目时候遇到的一些困难,如果都是做这个项目的(后端),可以看看这个是项目网址在此表示对大神奇淼的敬佩首先,我们需要去下载一个cnpm的一个东西我是看这个博客,写的贼好然后就去vs里面执行了,我还以为没执行成功,把终端输出的东西给chatgpt看了一下,显示成功了然后我进入了这个server项目嘛,但是之前的go感觉有些要补一下,就先开始了视频教程里面的golang教程(选择性),学语言就是这样的,学了又忘。

2024-04-02 12:54:02 766

原创 day7|错误恢复

其实就是由于越界等问题所导致的panic,我们该如何解决文中提到了两个方法,一种是使用defer,推迟错误的执行第二种:recover函数 (需要在defer里面生效)可以避免panic生效而导致整个函数终止。

2024-03-28 21:08:39 229

原创 Day 6 模版 template

实现静态资源服务支持HTML渲染后端需解决资源利用,并发,数据库存储问题.之前在设置动态路由的时候,通配符*支持匹配多级子路径映射到真实文件后,将文件返回,静态服务器就已经实现了找到文件之后,将文件返回给writwr的这一步 net/http库已经实现了因此,我们要做的只是解析请求的地址,映射服务器上真实的地址,交给http.FileServer处理我们给RouterGroup添加了两个方法,static这个方法是暴露给用户的。

2024-03-28 21:08:03 198

原创 day 5|中间件

本节目标:设计并实现 Web 框架的中间件(Middlewares)机制。实现通用的Logger中间件,能够记录请求到响应所花费的时间,

2024-03-28 21:07:27 481

原创 day4|分组控制

我们这样做的目的是我们可以像原来一样,通过Engine添加路由规则和方法,然后Group也可以添加路由和方法。唯一要注意的就是go.mod注意那个名称,我们不是已经新建了几个mod了嘛,在每一天下面,注意mod的名称。然后这里就将Engine作为最顶层的分组了,Engine拥有RouteGroup所有的能力。我们通常是以相同的前缀来区分路由分组,而作用在分组上的中间件,都会作用在子分组。开头的路由是 RESTful 接口,可以对接第三方平台,需要三方平台鉴权。每次的moule的名称要不一样啊。

2024-03-28 12:31:46 252

原创 day 3前缀树路由

我们的ListenAndServe方法的第二个参数类型就是Handler,也就是说只要实现了Handler接口,就可以作为第二个参数。我们现在Engine还是主要包含路由器router,router里面现在又包含了一个处理程序和一个Tree的结构。Handler是一个 接口,需要实现方法ServeHTTP,这样的一般用于静态服务器,能够递归的匹配子路径。前缀树就是所有的子节点都有一个共同的祖先节点。感觉自己消化的并不是很好,开始复习前面的内容。所有的HTTP请求,都会交给该实例处理。如果我们想支持类似于。

2024-03-28 11:18:30 372

原创 day 2| 上下文Context

再次来解释一下上下文,我也忘了,问下chatgpt上下文在 Go Web 开发中是指与当前 HTTP 请求相关的环境信息,它提供了更多的控制和功能来处理 HTTP 请求和响应。也就是对get和POST方法的强化对于处理 HTML 或 JSON 等响应内容,上下文同样是一个重要的组成部分。在处理 HTTP 请求时,上下文不仅包含了与请求相关的信息,还包括了与响应相关的信息。本节需要完成的 :将路由独立出来,方便之后增强设计上下文(CONTEXXT),封装Request和Response,

2024-03-28 11:16:38 370

原创 day 1 HTTP基础

仅仅是一个笔记,在此对geektutu大神膜拜用curl这个工具测试首先我们来解释一下curlcurl是一个命令行工具和库,用于在各种网络协议下传输数据,支持多种数据curl可以通过URL从服务器下载或上传数据,具有许多功能注意,我们现在已经自己实现了ServeHTTP,有了自己的处理思维了,而不在需要按照之前系统默认的那样,还需要创建一个处理程序,但是我们也不可能将所有的处理函数都放在ServeHTTP中,这个时候,我们需要沿着如何更好的回应系统中的请求的方向继续设计。

2024-03-28 11:12:37 428

原创 Gin简介(Go web基础知识)

https://geektutu.com/post/quick-go-gin.html我是从这个网站上面摘录的,就是做个笔记,仅分享。膜拜极客兔兔大佬快速:路由不使用反射,基于Radix树,内存占用少。中间件:HTTP请求,可先经过一系列中间件处理,例如:Logger,Authorization,GZIP等。这个特性和 NodeJs 的Koa框架很像。中间件机制也极大地提高了框架的可扩展性。异常处理:服务始终可用,不会宕机。Gin 可以捕获 panic,并恢复。

2024-03-23 19:53:15 438

原创 文本处理(有关go web方面)

本文基本摘录至https://learnku.com/docs/build-web-application-with-golang/073-regular-processing/3197,仅供学习,如果有需要学习web的同学可以看这个,不懂的再来看我的,我的仅作补充。这个模板的意思解析一下就是:很多时候,在用户的界面我们只需要修改它的某个项目,eg:姓名,电话,其他的样式,图片是一样的。根据提供的文件名创建新的文件,返回一个文件对象,默认权限是 0666 的文件,返回的文件对象是可读写的。

2024-03-22 14:53:59 788

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除