go语言学习

1.GOPATH、GOBIN、GOROOT

分别是存储源代码的工作目录;存储可执行代码;存储下载的go环境。

2.关于变量类型

1.var a int

go里的变量类型和变量名字是反过来的,这一点和cpp这些的区别

2.var a=100

这种会自动做类型推断

3.a:=100

这种是更简洁的短变量声明

3.变量名

短变量声明的变量可以在同一个作用域内重新声明,而其他类型的不可以。

其他类型的重名变量如果作用域有嵌套关系,会有屏蔽的效果,而屏蔽是不管这些是什么类型的。

4.管道

一般是用共享内存的方式通信,而管道是用通信的方式实现共享内存。

管道让我想到c里的pipe,可以给一个大小为2的数组一边是读端一边是写端来实现多进程通信。

管道分成缓冲管道和非缓冲管道,根据管道初始化的时候的大小。

大小为0的管道会把异步的通信变成同步的通信,会阻塞在那里。

关于单向管道:可以有单向发送和接收的管道,用处主要是函数调用和返回的时候可以只设置读和只允许对方写来限制操作。

5.函数

5.1函数别名

go里的函数是可以作为变量类型和赋值的,而在c里是用函数指针做赋值。

type a func(s string)

这个a类型就是函数类型,这里函数的签名就是根据函数的参数类型和数量和顺序,以及返回值的类型和数目决定。这个函数别名和函数定义的时候有一些不同,就是函数定义,a和func是反过来的。

5.2高阶函数

指参数或者返回值是函数的函数。高阶函数可以和闭包结合起来。

所谓的闭包就是函数使用的是不属于参数、内部、返回值的外部变量。

6.结构体

6.1定义

type Animal struct{

...

}

结构体可以嵌套其他类型,嵌套类型不需要名字。可以直接通过.访问。

6.2方法

方法和函数的不同是方法是有接收者

func (a Animal)String()string{}

这里代表这个方法属于Animal,这里就有一点像cpp的::。

定义了同名内容包括方法或者变量的层次嵌套的结构体,会出现的屏蔽的现象。

关于结构体和方法:这个和接口绑在一起用有很多用处,我学5840第一个就想到这个。

7.接口

7.1定义

type b interface{

...

}

与结构体的区别是接口内部都是方法,没有func,接口的方法比函数的签名更严格,方法名字也属于一部分来判断。

7.2接口的功能

实现了接口的所有方法的数据类型,就是接口的实例化,任何使用接口的部分可以用来替代。

7.3接口的nil

接口内部会有动态类型字段,只有未初始化和用nil初始化才会是nil。

接口的静态类型就是接口的类型,这个和多态的动态绑定有相像的地方。

7.4接口的嵌套

接口是不会有屏蔽现象的,只有冲突,于是不能使用相同的名字,接口的嵌套是被鼓励的,组合使用不同的接口看起来也会容易。

关于接口:接口不能被直接实例化,只有实现了接口方法的数据类型实例化的时候才是接口可以初始化的内容。

相关推荐
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
海海不掉头发3 小时前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
中科三方3 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
沫璃染墨4 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
刚入门的大一新生4 小时前
Linux-线程互斥
java·开发语言
香芋芋圆4 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
蓝祁子yoky5 小时前
Qt学习日记 Day13:网络编程(一)-TCP基础与Socket实战
网络·qt·学习
小熊恋旧5 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合5 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J5 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机