Go语言基础总结

1.GOPATH
GOPATH这个概念如果不搞懂,对于包管理就没办法理解,所以导包以及运行时的报错就会觉得无可适从,GoPath实际上类似于Maven中的repository,但在通常情况下,我们的go项目也应该被创建在GOPATH/src下,GOPATH可以设置多个。子目录分为src(依赖go项目源码),bin(编译命令),pkg(项目打包)三个
2.Package概念
与传统的面向对象语言不同,Go语言的包和所处在的文件夹完全没有关系,尽管按照良好的编码习惯,应该将go源文件所处的文件夹名字命名为该go文件的包名。并且该目录下,不允许出现超过一个包名,即在相同文件夹下的go文件,其包名相同
3.封装概念
小写开头的全局变量和常量,以及函数,是私有的,反之首字母大写则为公共的
4.导包
导包灵活而奇怪,可以起别名(算是优点,相同包名导入时使用更加清晰方便),通过在导入包前面加入.,可以省略包名调用方法也算是优点之一,但导入包只为执行init()而添加的_,令人难以理喻。_在go中起到的作用更像是为了解决引入多返回值和变量使用检查而做的补丁。
5.变量的声明和使用
声明但未使用的函数变量和常量会报错,全局变量和常量则不会。一般在函数中我们使用:=语法来减少变量类型的声明,在声明全局变量或者常量时,如果存在多个,我们可以使用分组声明 var () 或者 const()
6.类型转换
目前了解的类型转换规则非常严格,不同类型间基本很难进行类型转换,但也有相应的转换规则和函数实现。
7.奇怪的枚举规则
下一个枚举值的规则会继承上一个枚举值生成的表达式
8.数组和切片的关系
未声明长度的数据就是切片,但切片可以动态增添,并且切片也是一个引用类型,对于切片的操作不需要添加寻址符&
9.make、new的关系和操作
new返回指针,make返回初始化后的(非零)值,在此又有一个奇怪的点,就是切片和map的指针可以被遍历获取值,就如通过*拿到值之后进行操作一样,与上面我们所说的一样,因为对于切片和map属于引用类型,所以go在我们对其进行操作时,会明白我们实际上需要改变的是实际的值,因此go主动给我们做了这个寻址调用。
10.如果希望在调用函数时传递“引用”,我们需要将函数的方法参数声明为指针类型,否则改变的只是一个值拷贝,但实质上,go语言中也只有值传递,不过此处存在一个特殊情况,即map,切片,函数,通道这四种引用类型可以直接传递类型参数即可,不需要传递指针,函数声明的入参也可以声明为类型,go语言为我们做了自动的转换工作。但此处存在一个坑,若函数需改变slice的长度,则仍需要取地址传递指针,除此之外的类型,如果涉及到对传入参数的改变,则一定要将函数入参声明为指针类型。
11.指针调用以及实例调用
如果你操作的是一个引用类型或者指针,当你用指针去访问相应的字段时(虽然指针没有任何的字段),Go知道你要通过指针去获取这个值
当你调用方法的receiver是一个指针时,你也可以直接用对象去调用该方法,go都帮助我们将其转换为合适的姿态,因为go知道调用方法需要的接收者是指针类型,go自动帮你转换了
12.任何的类型都继承于interface{}
13.记住go语言的几种引用类型,切片,Map(集合),函数,通道(Channel)
14.使用type声明函数类型可以实现多态,并且type可以用于起别名,因此有的时候有助于语义化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值