
Golang基础
文章平均质量分 74
go
-代号9527
逢山开路,遇水搭桥!纸上得来终觉浅,绝知此事要躬行。
展开
-
【Go】二十、反射
注意点:如果有了reflect.Value类型,想转回原来的类型,可以用reflect.Value类型的Interface方法,转回空接口类型,再断言转型,回到int类型。在上面reflect.Type和reflect.Value类型对象的基础上,获取类别(Student是类型,其类别是struct结构体)。有点像Object类。和Java一样,获取所有的变量和所有的方法,调用方法,方法的首字母必须大写才能有对应的反射的访问权限。原创 2024-04-02 20:14:43 · 546 阅读 · 1 评论 -
【Go】十九、网络连接与请求发送
UDP的以上几点,形象说:一个班级计划从学校出发,去地点A春游,十点在地点A集合(地点A类比目标机器,学校就是另一台客户端机器)。但去地点A不是统一过去,大家去地点A的方式不同,有的骑车,有的步行。十点以后,到地点A的学生玩去了,其他半路上迟到的或者迷路的不再管了。两个设备之间传输数据,每过一层,就做一层封装(如经过应用层,添加一个APP的头),传输到设备2上以后,再逐层拆封。有点像快递发货和收货了。TCP协议是可靠的,相反,UDP协议是不可靠的,UDP在发送数据之前不需要建立连接,也不需要维护连接状态。原创 2024-04-02 17:34:23 · 734 阅读 · 0 评论 -
【Go】十八、管道
chan是管道的关键字数据类型,比如int类型的管道只能写入整数int管道是引用类型,必须初始化才能写入数据,即make后才能使用管道中不能存放大于容量的数据,如果管道的数据已经全部取出,那么再取就会报错示例:3、管道的关闭使用内置函数close可以关闭管道,当管道关闭后,就不能再向管道写数据了,但是仍然可以从该管道读取数据4、管道的遍历forfor-range在遍历时,如果管道没有关闭,则报错:5、管道 + 协程开启一个writeData协程,向管道中写入50个整数.开原创 2024-04-02 16:20:09 · 1035 阅读 · 0 评论 -
【Go】十七、进程、线程、协程
如上,主线程中,开启一个协程,协程每1秒输出hello golang,主线程每一秒输出一次hello 9527,主线程和协程在同时执行,且属于同一个线程(主线程)。协程的引入,给CPU一种:该线程好像是一直在计算,io比较少的错觉,从而会更多的将cpu的执行权限分配给我们的线程。多协程操作同一个数据的问题:按以下1.2.3.4.5.6的步骤,就发现做了一次+1,一次-1,结果为-1。线程是CPU控制的,而协程是程序自身控制的,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级。原创 2024-04-02 14:06:14 · 1481 阅读 · 0 评论 -
【Go】十六、文件操作
在上面的程序中不需要进行 Open\Close操作,因为文件的打开和关闭操作被封装在ReadFile函数内部了。参数三:权限控制(Linux下生效,Windows无效)参数二:文件打开模式,多选用 | 连接。原创 2024-04-02 10:09:40 · 563 阅读 · 0 评论 -
【Go】十五、接口、多态、断言
面向对象的最后一个特征:多态,即多种形态,编译时、运行时两种状态。Go中的多态特征是通过接口实现的,可以按照统一的接口来调用不同的实现。6)空接口没有任何方法,所以可以理解为所有类型都实现了空接口,也可以理解为我们。即,element是否为T类型,是转为T,值为value,且ok为true。1)接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量。以日常生活中打招呼为例,定义接口规范,各国人为打招呼为具体的实现。2)只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型。原创 2024-04-01 21:13:18 · 575 阅读 · 1 评论 -
【Go】十四、封装、继承
3)当结构体和匿名结构体有相同的字段或者方法时,编译器采用就近访问原则访问。想访问匿名结构体的方法或字段,可加上结构体名。7)嵌套匿名结构体后,也可以在创建结构体变量(实例)时,直接指定各个匿名结构体字段的值。1)结构体可以使用嵌套匿名结构体所有的字段和方法,无关父结构体字段方法的大小写。5)多继承时,父结构体若出现相同的字段名或者方法名,访问时带结构体类型名。9)构体的字段可以是结构体类型的,注意这是组合模式,无关继承。6)结构体的匿名字段可以是基本数据类型。8)嵌入匿名结构体的指针也是可以的。原创 2024-04-01 20:18:12 · 595 阅读 · 0 评论 -
【Go】十三、面向对象:方法
如果一个类型实现了String()这个方法,那么fmt.Println输出这个类型的变量时,默认会调用这个类型中的String()进行输出,Java的toString。注意上面能访问到,一者该结构体名称首字母大写,public,二者访问时带了包名.结构体名称。同函数,方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。type重新定义(相当于取别名),Go认为是新的数据类型,但是相互间可以强转。结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式。原创 2024-04-01 19:30:15 · 654 阅读 · 0 评论 -
【Go】十二、map类型
/方式1://定义map变量://只声明map内存是没有分配空间//必须通过make函数进行初始化,才会分配空间:a = make(map[int]string,10) //map可以存放10个键值对//将键值对存入map中:a[20095452] = "张三"a[20095387] = "李四"//输出集合//方式2:自动类型推断b[20095452] = "张三"b[20095387] = "李四"//方式3:20095452 : "张三",原创 2024-04-01 17:12:46 · 483 阅读 · 0 评论 -
【Go】十一、切片
方式一:通过一个数组定义切片方式二:通过内置函数makevar切片名[type = make([], len,[cap])但通过make创建的切片,make底层创建一个数组,该数组对外不可见,不能直接操作这个数组,要通过切片去间接的访问或者操作。方式三:直接指定具体的数据,原理类似make。注意格式上有点像数组,但[ ]中没有给长度,也没有...原创 2024-04-01 16:35:44 · 737 阅读 · 1 评论 -
【Go】十、数组
数组变量的地址等于第一个值的地址,后面的元素地址 + index * type,即数组每个空间占用的字节数取决于数组类型。而初始默认值则是类型的默认值。二维数组的内存:同一维,数组的地址即第一个元素(一维数组)的地址,也是第一个元素(一维数组)的第一个元素的地址。3)想在其他函数中修改原来的数组,就要使用引用传递(通过指针)2)Go的数组是值类型,进行的是值拷贝。1)数组的长度属于类型的一部分。原创 2024-04-01 15:36:14 · 356 阅读 · 0 评论 -
【Go】九、defer+recover机制处理错误
errors包的New函数,返回一个error类型的错误示例:如果希望程序出现错误后,不再执行后面的代码,可用builtin包下内置函数:panic。原创 2024-04-01 14:10:01 · 804 阅读 · 0 评论 -
【Go】八、常用字符串函数与时间函数
now.Format 按照指定的格式,但各个数字必须是固定的(有设计go的想法的时间?Now()返回值是一个结构体,类型是:time.Time。核心包strings。原创 2024-04-01 13:44:14 · 537 阅读 · 0 评论 -
【Go】七、包、init函数、匿名函数、闭包
如上,再定义匿名函数的时候直接调用,如此就能保证匿名函数只被调用一次。如果需要被多次调用,可将匿名函数赋值给一个变量(但不常用了,想多次调可直接去定义个普通函数)可以看到匿名函数中用到了函数以外的变量sum,它两形成闭包。如上,不用闭包,想达到和上面闭包一样去共用某个值,就很麻烦。不同的包,不同的功能和业务,互相import。闭包即一个函数和起引用的环境组合的一个整体。package 包名。原创 2024-04-01 10:45:38 · 1122 阅读 · 0 评论 -
【Go】六、函数
语法:注意点:示例:无返回值:多个返回值:多个返回值,但只接收一个返回值,用_忽略:,调函数修改,不会影响原来的值在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个了。通过该变量可以对函数调用。运行结果:既然可以有函数类型的变量,那函数类型的形参也可以:语法:type mylnt int ,即myInt等价于int注意,虽然是别名,但仍然不能直接互相赋值。6、支持对返回值命名对函数返回值命名,里面顺序就无所谓了,顺序不用对应,也不用return后面跟了。旧的写原创 2024-03-29 20:51:58 · 653 阅读 · 0 评论 -
【Go】五、流程控制
有点像Java的foreach,用于遍历数组、切片、字符串、map、通道。遍历coll,遍历的每个结果,索引值被key接收,值被val接收。注意点:for的初始表达式中,不能用var定义变量的形式,要用。原创 2024-03-29 19:27:26 · 694 阅读 · 0 评论 -
【Go】四、包名、访问范围控制、标识符、运算符
以下访问其他包中小写字母开头的变量,访问不到:cannot refer to unexported name test.stuNo。后开始计算的,因此需要配置一个环境变量。方式一:fmt包的Scanln函数。方式二:fmt包的Scanf函数。1)忽略导入的没使用的包。注意,导包时,包名是从。原创 2024-03-29 19:25:39 · 655 阅读 · 0 评论 -
【Go】三、Go指针
float32意味着这个指针指向的是float32类型的数据,而&num对应一个int类型的变量。编译报错:cannot use &num(type *int) as type。4)基本数据类型,都有对应的指针类型,形式为*数据类型。1)可以通过指针去改变它指向的那个变量的值。2)指针变量接收的一定是地址值。3)指针变量的地址不可以不匹配。原创 2024-03-29 19:25:09 · 618 阅读 · 0 评论 -
【Go】二、Go的基本数据类型
通过变量名在内存中找到它(通过房间号找到在一栋楼里找到某个房间),变量类型,即区分空间大小(类比单人间、双人间)最后,注意换行拼接时,+保留在上⼀⾏的最后,因为和Java不一样,没封号,你换行,编译器会认为这个语句结束了。字符串是不可变的:指的是字符串⼀旦定义好,其中的字符的值不能变,如str[0] = 'b‘和Java有char不同,Go中没有专⻔的字符类型,如果要存储单个字符(字⺟),⼀般使⽤。注意最后的两个,int8类型-128到127,所以这个编译能通过,但是结果可能会溢出。原创 2024-03-29 19:24:44 · 992 阅读 · 0 评论 -
【Go】一、Go开发环境搭建
配置环境变量path,以便在任意路径下执行某个命令,将命令"注册"到计算机中。原创 2024-03-29 09:00:00 · 641 阅读 · 0 评论