![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang基础
文章平均质量分 69
哈顿雷
对技术保持热情,永远追求新技术
展开
-
接口interface
定义:接口是一种抽象的类型,是一组method的集合,里头只有method方法,没有数据成员。先定义接口,然后多个struct类型去实现接口里的方法,就可以通过接口变量去调用struct类型里实现的方法。猫科动物可以是一个interface,哺乳动物可以是另一个interface,猫这个struct类型可以实现猫科动物和哺乳动物这2个interface里的方法。比如动物都会叫唤,那可以先定义一个名为动物的接口,接口里有叫唤方法speak,然后猫和狗这2个struct类型去实现各自的speak方法。原创 2023-12-21 21:06:35 · 390 阅读 · 0 评论 -
defer语义
如果在函数内调用了多次defer,那在函数return之前,defer的函数调用满足LIFO原则,先defer的函数后执行,后defer的函数先执行。上例中,被defer的函数fmt.Println的参数i在执行到defer这一行的时候,i的值是0,fmt.Println的参数就被确定下来是0了,因此最终打印的结果是0,而不是1。执行顺序是函数f先把要返回的值6赋值给result,然后执行被defer的函数func,result被修改为42,然后函数f返回result,也就是返回了42。原创 2023-12-21 07:58:27 · 819 阅读 · 0 评论 -
goroutine和channel
因为fetchChannel里的value := <-ch执行之后,main里的ch<-a就不再阻塞,继续往下执行了,所以可能main里最后的fmt.Println比fetchChannel里的fmt.Printf先执行,main执行完之后程序就结束了,所有goroutine自动结束,就不再执行fetchChannel里的fmt.Printf了。channel被close后,如果channel还有值,接收方可以一直从channel里获取值,直到channel里的值都已经取完。原创 2023-12-21 07:56:23 · 810 阅读 · 0 评论 -
接口interface
先定义接口,然后多个struct类型去实现接口里的方法,就可以通过接口变量去调用struct类型里实现的方法。猫科动物可以是一个interface,哺乳动物可以是另一个interface,猫这个struct类型可以实现猫科动物和哺乳动物这2个interface里的方法。只要有某个方法的实现使用了指针接受者,那给包含了这个方法的interface变量赋值的时候要使用指针。比如动物都会叫唤,那可以先定义一个名为动物的接口,接口里有叫唤方法speak,然后猫和狗这2个struct类型去实现各自的speak方法。原创 2023-12-21 07:55:30 · 729 阅读 · 0 评论 -
go类型转换
注意:Go不支持隐式类型转换,要做数据类型转换必须按照type_name(expression)方式做显式的类型转换。// total_weight和num都是整数,相除结果还是整数。原创 2023-12-21 07:54:48 · 375 阅读 · 0 评论 -
递归函数的
【代码】递归函数的。原创 2023-12-21 07:54:11 · 310 阅读 · 0 评论 -
map集合
注意: 如果key不存在,通过map[key]访问不会给map自动插入这个新key。Go语言里的map底层是通过hash实现的,是一种无序的基于<key, value>对组成的数据结构,key是唯一的,类似python的dict。len(map):通过内置的len()函数可以获取map里<key, value>对的数量。删除key,参数为map和对应的key。因此切片slice,函数类型function,集合map,不能用作map的key。如果只是声明map,但没有初始化,只能读,不能写。原创 2023-12-21 07:52:22 · 306 阅读 · 0 评论 -
range迭代
range可以用于for循环,对字符串,数组array,切片slice,集合map或通道channel进行迭代。有2种方法可以对string进行range遍历,一种是只拿到字符串的下标索引,一种是同时拿到下标索引和对应的值。有如下2种方法可以遍历map,一种是拿到key,一种是拿到key,value。对channel进行range迭代,会循环从channel里取数据。// 方法1:可以通过range拿到字符串的下标索引。// 方法1,拿到key,再根据key获取value。// 方法1,拿到行索引。原创 2023-12-21 07:51:48 · 322 阅读 · 0 评论 -
切片Slice
如果dstSlice的长度M小于srcSlice的长度N,则只会拷贝srcSlice里的前M个元素到目标切片dstSlice里。但是如果函数使用切片指针作为参数,在函数体内可以通过切片指针修改外部切片的值,比如下例里的change2函数。冒号:截取后的新slice变量底层有个指针,会指向原数组或者原切片的数组空间,对新切片的修改也会影响原数组或者原切片。append不改变原切片的值,比如下例里的append(slice, 4)并不会改变slice的值。Go数组的长度在定义后是固定的,不可改变的。原创 2023-12-21 07:51:13 · 964 阅读 · 0 评论