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

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

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

相关推荐
试剂界的爱马仕7 分钟前
Anti-mouse PD-1 mAb (Clone RMP1-14) 与 Axitinib 小鼠实验使用方案整理汇总
大数据·人工智能·深度学习·学习
dog25032 分钟前
从重尾到截断流量模型的演进
开发语言·php
qq_401700411 小时前
Qt QSS 完全入门写出漂亮界面以及解决样式不生效问题
开发语言·qt
Gp7HH6hrE1 小时前
OpenAI 与 Anthropic 开放公共学习平台
人工智能·学习·chatgpt
kaixin_learn_qt_ing2 小时前
2026.7.3---学习记录
学习
我是一颗柠檬2 小时前
【Java项目技术亮点】覆盖索引与索引下推优化
android·java·开发语言
2601_962440842 小时前
计算机毕业设计之健身房管理系统的设计与实现
java·开发语言·课程设计·旅游·宠物
旖-旎2 小时前
QT系统篇(5)(下)
开发语言·c++·qt
99乘法口诀万物皆可变2 小时前
PcanToVectorXL_V01:打通 Vector 与 PCAN 的双向 CAN/CAN‑FD 桥梁
c++·学习
MartinYeung53 小时前
[论文学习] CAMIA:下文感知成员推理攻击
人工智能·深度学习·学习