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

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

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

相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a11177610 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao10 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大11 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang