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

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

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

相关推荐
计算机安禾16 分钟前
【c++面向对象编程】第40篇:单例模式(Singleton)的多种C++实现
开发语言·c++·单例模式
Harm灬小海18 分钟前
【云计算学习之路】学习Centos7系统-Linux软件包管理
linux·运维·服务器·学习·云计算·yum·rpm
魔法阵维护师25 分钟前
从零开发游戏需要学习的c#模块,第十七章(显示真正的图片——精灵绘制)
学习·游戏
婷婷_17226 分钟前
JTAG (IEEE 1149.1)学习记录
学习·程序人生·debug·芯片·jtag·phy·eth/pcie
_日拱一卒31 分钟前
LeetCode:114二叉树展开为链表
java·开发语言·算法
ygkl969832 分钟前
未完待续 模拟题
学习
天天进步201534 分钟前
从零打造 Python 全栈项目:智能教学辅助系统
开发语言·人工智能·python
几司43 分钟前
OpenISP 模块拆解 · 第1讲:坏点校正 (DPC)
笔记·学习·isp
-To be number.wan1 小时前
计算机组成原理 | 定点数加减运算
学习·计算机组成原理
kkeeper~1 小时前
0基础C语言积跬步之内存函数
c语言·开发语言