golang入门基础

来源:互联网 发布:ubuntu mate树莓派 编辑:程序博客网 时间:2024/05/16 01:01

1:函数实现(传值接受者和传指针接受者的使用场景)
传值:——》副本 只读,不可修改
传指针:—-》引用,可修改
2:命名:字母或下划线开头
3:可见性与不可见
命名首字母大写:包内包外均可见
命名首字母小写:只在包内可见
4:变量定义初始化几种方式
var 变量名 类型 = 表达式
var 变量名 = 表达式
变量名 := 表达式
5:指针的++
是增加指针指针所指向的变量的值,并非增加指针
6:垃圾自动回收
从每个包级的变量和每个当前运行的函数的每一个局部变量开始,通过指针或者引用的访问
路径遍历,是否可以找到该变量,如果不存在这样的访问路径,那么说明该变量是不可大的,也
就是说它是否存在并不会程序后续的计算结果
因为一个变量的有效周期只取决于是否可达,因此一个循环迭代内部的局部变量的生存周期
可能超出其局部作用域。同时,局部变量可能在函数返回之后依然存在
7:包的init函数
除了无法被调用或引用之外,其他行为和普通函数类似
在main函数执行之前,所有依赖的包都已经完成初始化
8:常量
所有常量的运算都可以在编译期完成(作用:可减少运行时的工作,也方便编译优化)
定义常量组如果不适用itoa常亮生成器语法或者指定常量的值,那么所有常亮的值都相同
9:复合类型
数组和结构体是有固定内存大小的数据结构
slice和map则是动态数据结构(需要动态增长)
数组:数组长度是数组类型的一个组成部分,所以[3]int和[5]int是不一样的两种类型
10:slice
测试一个slice是否为空,使用len()==0来判断,而不要使用s==nil来判断,因为一个nil
值的slice的行为和其他任意0长度的slice一样
在底层,make创建了一个匿名的数组变量,然后返回一个slice;只有通过返回的slice才能引用底层匿名
数组变量。
11:map
不能对元素取地址的原因:
1:map中的元素是常量,不能取地址
2:禁止对map元素去地址的原因,可能map随着元素数量的增长而重新分配更大的内存空间,从而导致之
前的地址无效
12:接口
接口类型是对其他类型行为的抽象和概括
多态:接口+方法(同名)
一个不包含任何值的nil接口值和一个刚好包含nil指针的接口值 不相同
13:channels
不带缓存的、串联的、单方向的、带缓存的
不带缓存的:会导致goroutine阻塞(接收者收到数据发生在唤醒发送者goroutine之前)
串联的channels:用于将多个goroutine连接在一起,上一个channels作为下一个channels的输入
14:并发
并行:同时做好多事
并发:同时管理很多事
并发的实现:利用通道实现不加锁的数据传递
消除竟态的方式:原子函数,锁,通道

原创粉丝点击