- 博客(39)
- 收藏
- 关注
原创 网络编程-tcp socket编程
真正的房子只有几个门,但是一个ip地址的端口可以有65536(256×256)个之多,端口是通过端口号来标记的,端口号只有整数,范围是从0到65535(256×256-1)TCP/IP协议,称为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是internet最基本的协议、internet国际互联网络的基础,就是由网络传的IP协议和传输层的TCP协议组成的。2.1-1024是固定端口,又叫有名端口,即被某些程序固定使用,一般程序员不使用。2.接收客户端的tcp连接,建立客户端和服务器端的链接。
2023-10-07 17:38:33 139
原创 Redis
2.Redis:REmote Dictionary Server(远程字典服务器),高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是最热门的NoSql数据库之一,也称为数据结构服务器.底层是HashTable数据结构,Set也是存放很多字符串元素,字符串元素是无序的,而且元素的值不能重复。返回列表key的长度,如果key不存在,则key被解释为一个空列表,返回0。string是redis最基本的类型,一个key对应一个value。
2023-10-07 17:38:12 109
原创 GO-反射
4.使用反射的方法来获取变量的值(并返回对应的类型),要求数据类型匹配,比如x是int,那么就是应该使用reflect.value(x).int(),而不能使用其它的,否则保panic。5.通过反射的来修改变量,注意当使用SetXxx方法来设置需要通过对应的指针类型来完成,这样才能改变传入的变量的值,同时需要使用到reflect.Value.Elem()方法。2.Type是类型,Kind是类别,Type和Kind可能是相同的,也可能是不同的。3.通过反射,可以修改变量的值,可以调用关联的方法。
2023-07-13 19:42:58 100
原创 channel(管道)
4.在for range管道时,当遍历到最后的时候,发现有管道没有关闭,程序会认为有数据继续写入,因此就会等待,但因为没有程序写入,就会出现死锁。使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从该channel读取数据。3.在for range管道时,当遍历到最后的时候,发现管道关闭了,就结束channel中数据读取的遍历工作,正常退出。2.在遍历时,如果channel已经关闭,则会正常遍历数据,遍历完后,就会退出遍历。
2023-07-08 17:22:20 523
原创 goroutine(协程)
因为是在多个CPU上(比如有10个CPU),比如有10个线程,每个线程执行10毫秒(各自在不同CPU上执行),从人的角度看,好像这10个线程都在执行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行。因为是在一个CPU上,比如有10个线程,每个线程执行10毫秒(进行轮询操作),从人的角度看,好像这10个线程都在执行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。2.协程是从主线程开启的,是轻量级的线程,是逻辑态。,它是比进程更小的能独立运行的基本单位。
2023-07-02 16:27:51 169
原创 Go-单元测试
Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言的测试框架相似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。3.单元测试能及时的发现程序设计或实现的逻辑错误,使问题暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让程序能够在高并发的情况下还能保持稳定。(1)cmd>go test [如果运行正确,无日志,错误时,会输出日志],一般来说就是Test+被测试的函数名。
2023-06-29 20:01:56 991
原创 Go-json
一.基本介绍 JSON(JavaScriptobject notation)是一种轻量级的数据交换格式。 易于机器解析和生成,并有效地提升网络传输速率,通常程序在网络传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化恢复成原来的数据类型(结构体、map等)。二.json数据格式说明 在js语言中,一切都是对象。因此,任何支持的类型都可以通过json来表示,例如字符串、数字、对象、数组、map、结构体等。
2023-06-29 17:26:58 89
原创 Go-文件操作
说明:os.OpenFile是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。2.读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况,相关方法和函数(ioutil.ReadFile)4.打开一个存在的文件,将原来的内容读出显示在终端,并且追加几句语句。编写一个程序,将一个文件的内容,写入到另外一个文件。2.打开一个存在的文件,将原来的内容覆盖成新的内容。二.常用的文件操作函数和方法。
2023-06-26 19:10:33 613
原创 Go-接口
8.一个接口(比如A接口)可以继承多个别的接口(比如B,C接口),这时如果要实现A接口,也必须将B,C接口的方法也全部实现。3.在Golang中,一个自定义类型需要将某个接听的所有方法都实现,我们说这个自定义类型实现了该接口。4.一个自定义类型只有实现了某个接口,才能将该自定义类型的实例(变量)赋给接口类型。10.空接口interface{}没有任何方法,所以所有类型都实现了接口。2.接口中所有的方法都没有方法体,即都没有实现的方法。,但是可以指向一个实现了该接口的自定义类型的变量(实例)
2023-06-12 15:40:40 57
原创 Go-继承
3.当结构体和匿名结构体有相同的字段或者方法时,编译器采用就近访问原则访问,如希望访问匿名结构体的字段和方法,可以通过匿名结构体名来区分。4.结构体嵌入两个(或多个)匿名结构体,如两个匿名结构体有相同的字段和方法(同时结构体本身没有同名的字段和方法),在访问时,就必须明确指定匿名结构体名字,否则编译报错。2.当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体,在该结构体中定于这些相同的属性和方法。1.继承可以解决代码复用,让我们的编程更加靠近人类思维。一.继承的基本介绍和示意图。
2023-06-05 19:53:52 756
原创 Go-封装
在Golang开发中并没有特别强调封装,这点并不像Java,Golang本身对面向 对象的特性做了简化的。的理解和好处:隐藏实现细节,提可以对数据进行验证,保证安全合理。
2023-06-02 14:57:04 176
原创 Go-方法
Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct。说明:方法的调用和传参机制和函数基本一样,不一样的地方是方法调用时,会将调用方法的变量,当做实参也传递给方法。1.给person结构体jisuan方法,接收一个数n,计算从1到n的和。2.给person结构体添加getsum方法,计算两个数的和,并返回结果。
2023-05-31 09:06:55 52
原创 Go-面对对象-结构体
4.Golang仍然有面对对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现。2.Golang没有类,Go语言的结构体和其它编程语言的类有同等地位,可以理解为Golang是基于struct来实现OOP特性的。4.struct的每个字段上,可以写一个tag,该tag可以通过反射机制获取,常见的使用场景就是序列号和反序列号。3.结构体进行type重新定义,Golang认为是新的数据类型,但是相互间可以强转。
2023-05-28 18:08:31 79
原创 Go项目-GoWeb
项目简介:该项目使用Go语言实现了一个简单的Web服务器,支持动态请求处理并且能够实现静态资源服务。搭建GoWeb框架,并实现HTTP请求、响应功能;实现了路由匹配,处理各个请求对应的页面模板和参数;将页面动态输出到浏览器,并支持静态资源服务;
2023-05-24 22:52:04 360 1
原创 Go项目-简单的学生成绩管理系统
项目描述:该项目可以记录学生的姓名和成绩信息,支持添加、删除、修改和查询学生信息,并输出全班学生的平均分、最高分和最低分等统计信息。项目名称:简单的学生成绩管理系统。
2023-05-24 22:13:09 243
原创 Go-map
介绍:切片的数据类型如果是map,则我们称为slice of map,map切片,这样使用则map这个 数就可以动态变化了。delete(map,"key"),delete是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。(1).如果我们要删除map的所有key,没有专门的方法去一次删除,可以遍历key,逐个删除。2.map的key是不能重复的,如果重复了,则以最后的key-value为准。三.map使用的方式。
2023-05-23 09:26:51 63
原创 Go-排序和查找
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式、选择式、插入式)数据量过大,无法加载到内存中,需要借助外部存储进行。包括(合并式、直接合并式)对一个有序的数组进行二分查找,输入一个数,该数组是否存在此数。排序是将一组数据,依指定的顺序进行排列的过程。分两种:冒泡排序法和快速排序法。2.二分查找(该数组是有序)
2023-05-22 15:04:24 55
原创 切片(slice)
方式二是通过make来创建,make也会创建一个数组,是由切片在底层维护,是看 不见的。(2)var slice = arr[start:len(arr)] 可以简写为 var slice = arr[start:]4.切片定义完后,还不能使用,因为本身是一个空的,需要让其引用到一个数组,或者make一 个空间供切片使用。基本语法:var 切片名 []type = make([],len,[cap])
2023-05-22 09:30:48 412
原创 数组的使用
1.创建一个byte类型的26个元素的数组,分别 放置 'A'-'Z'。1.数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。3.数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。8.长度是数组类型的一部分,在传递参数函数时,需要考虑数组的长度。3.数组的各个元素的地址间隔是依据数组的类型决定。2.数组的第一个元素的地址,就是数组的首地址。3.请求出一个数组的和平均值。
2023-05-17 10:28:10 58
原创 字符串函数
10.不区分大小写的字符串比较(==是区分字母大小写的) : fmt.Println(strings.EqualFold("abc","Abc")) //true。") //[ "hello"]//将右边!") //[ "hello"]//将左边!string.Replace("go go hello","go","go语言",n)
2023-05-14 21:32:43 49 1
原创 Golang函数
细节说明:(1)在给一个文件打包时,该包对应一个文件夹,比如这里的utils文件夹对应的包名就是 utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。3.函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写该函数可以被本包文件和其他包文件使用,类似public,首字母小写,只能被本包文件使用,其他包文件不能使用,类似private。6.如果希望函数类的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量。
2023-05-12 13:47:26 491 2
原创 Go导包时出现的问题总结
一直提醒我找不到这个包,我试了很多方法,也反复尝试用环境变量 GO111MODULE 开启或关闭模块支持,发现并不是这方向的问题,我也考虑过是不是环境变量的原因,反复修改了GOBIN和GOPATH的路径。修改了路径,重新设置环境变量。发现也是出现这样的导包问题,后来我仔细查看了报错的路径;
2023-05-10 09:36:28 287
原创 Golang程序流程控制
1.switch的执行流程是,先执行表达,得到值,然后和case的表达式进行比较,如果相等,就匹配到,然后执行对应的case的语句块,然后退出switch控制。2.如果switch的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。1.统计三个班的成绩情况,每个班有五名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]细节:1.case后的各个表达式的值数据类型,必须和switch的表达式数据类型一致。3.Golang的case后的表达式可以有多个,用逗号间隔。
2023-05-08 19:22:12 250
原创 Golang获取用户终端输入
要求:可以从控制台接收用户信息,【姓名,年龄,薪水,是否通过考试】在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。1.使用fmt.Scanln()2.使用fmt.Scanf()
2023-05-06 08:30:36 671
原创 Golang运算符介绍
1.对于除号"/",它的整数除和小数除是有区别的,整数之间做除法时,只保留整数部分而舍弃小数 部分。2.定义一个变量保存华氏温度,华氏温度转换为摄氏温度公式为:5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。4.Golang的++和--只能写在变量的后面,不能写在变量的前面,即:只有a++ a-- 没有++a --a。2.当对一个数取模时,可以等价a%b=a-a/b*b,这样我们可以看到取模的一个本质运算。1.关系运算符的结果都是bool型,也就是要么是true,要么是false。
2023-05-05 16:58:55 910
原创 Golang值类型和引用类型和标识符
5.下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。如果首字母小写则只能在本包中使用(注:简单的说,首字母大写的是公有的,首字母小写的私有的),在Golang中没有public和private等关键字。特点:变量存储的是一个地址,这个地址对应的空间才真正存储数据,内存通常在堆上分配,当 没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。1.包名:保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,不要和 标准库冲突。
2023-04-24 17:43:24 84
原创 Golang 指针
代码说明:&i是i变量的地址 后面声明的ptr 是一个指针变量 所以它内存里存储的值是一个地址而不是一个整数,而ptr内存本身就有一个地址,所以&ptr指向它本身的内存地址,ptr存储的值是一个地址指向i的地址即&i,ptr本身是一个指针类型的变量,*ptr将它所代表的地址转换为整数值,即i的变量值10.1.值类型,都有对应的指针类型,形式为 *数据类型,比如int的对应的指针就是*int,float32对应的指针类型就是*float,依次类型,要相匹配。1.基本数据类型,变量寸的就是值,也叫值类型。
2023-04-24 16:00:21 125
原创 Golang基本数据类型的转换
1.在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,比如 我们可以将 “123”转成一个整数,但是不能把“hello”转成一个整数,如果这样做,Golang直接将其转成0,其他类型也是一样的道理。2.被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化,就是把被转换的 的数据赋值给另一个变量。1.Go中,数据类型的转换可以是从表示范围小->表示范围大,也可以 范围大->范围小。二.基本数据类型和string的转换。
2023-04-23 17:46:51 256 1
原创 Golang中变量的数据类型
2).反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击,输出源代码的效果。4.在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值。说明 :1.如果我们保存的字符在ASCLL表的,比如[0-1,a-z,A-Z]直接可以保存到byte。6.字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码。存储:字符-->对应码值--->二进制----->存储。读取:二进制-->码值---->字符---->读取。3.Go语言的字符使用UTF-8编码。
2023-04-19 16:33:37 624
原创 Golang语法注意事项
5\r:一个回车 fmt.Println("张三李四\r王五") 回车不等于换行。1.\t:表示一个制表符,通常使用它可以排版。1)// 注释文字 CTRL + /一.Golang常用的转义字符。2) /* 注释文字 */1.注释形式(注释不能嵌套)
2023-04-17 18:46:12 63
空空如也
main.go:5.2
2023-05-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人