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接口的嵌套

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

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

相关推荐
青春易逝丶6 分钟前
策略模式
java·开发语言·策略模式
Amazing_Cacao7 分钟前
工艺师初级|参数与风味对齐(精品可可,精品巧克力)
笔记·学习
freexyn7 分钟前
Matlab入门自学七十四:坐标系转换,直角坐标、极坐标和球坐标的转换
开发语言·算法·matlab
Dxy123931021630 分钟前
js如何把字符串转数字
开发语言·前端·javascript
_饭团1 小时前
字符串函数全解析:12 种核心函数的使用与底层模拟实现
c语言·开发语言·学习·考研·面试·蓝桥杯
Larry_Yanan1 小时前
Qt网络开发之基于 QWebEngine 实现简易内嵌浏览器
linux·开发语言·网络·c++·笔记·qt·学习
2401_831824961 小时前
嵌入式C++驱动开发
开发语言·c++·算法
芯跳加速1 小时前
AI 视频自动化学习日记 · 第三天
人工智能·学习·ai·自动化·音视频
qingcyb1 小时前
重复 id 对应的多个对象
开发语言·python
li星野1 小时前
[特殊字符] 模拟试卷一:C++核心与系统基础(90分钟)答案版
开发语言·c++·算法