使用大小来区分函数可见性
大写是public类型
小写是private类型
func prifunc int{}
func pubfunc int{}
声明静态变量
const value int
定义变量
var value int
声明一般类型、接口和结构体
声明函数
func function () int{}
go里面所有的空值对应如下
通道类型
内建函数 new 用来分配内存 , 它的第一个参数是一个类型 , 不是一个值,它的返回值是一个指向新分配类型零值的指针
func new(Type) *Type
[这位博主有非常详细的分析]
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可 。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的 。
同一个程序中的所有 goroutine 共享同一个地址空间 。
语法格式如下:
通道(channel)是用来传递数据的一个数据结构 。
通道的声明
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯 。操作符 - 用于指定通道的方向,发送或接收 。如果未指定方向,则为双向通道 。
[这里有比较详细的用例]
go里面的空接口可以指代任何类型(无论是变量还是函数)
声明空接口
go里面的的强制类型转换语法为:
int(data)
如果是接口类型的强制转成其他类型的语法为:
go里面的强制转换是将值复制过去,所以在数据量的时候有比较高的运行代价
Go语言实践模式 - 函数选项模式(Functional Options Pattern)大家好,我是小白,有点黑的那个白 。
最近遇到一个问题,因为业务需求,需要对接第三方平台.
而三方平台提供的一些HTTP(S)接口都有统一的密钥生成规则要求.
为此我们封装go语言func结构了一个独立的包 xxx-go-sdk 以便维护和对接使用.
其中核心的部分是自定义HTTP Client,如下:
一些平台会要求appKey/appSecret等信息,所以Client结构体就变成了这样,这时参数还比较少, 而且是必填的参数,我们可以提供构造函数来明确指定 。
看起来很满足,但是当我们需要增加一个 Timeout 参数来控制超时呢?
或许你会说这还不简单,像下面一样再加一个参数呗
那再加些其go语言func结构他的参数呢?那构造函数的参数是不是又长又串,而且每个参数不一定是必须的 , 有些参数我们又会考虑默认值的问题 。
为此,勤劳但尚未致富的 gophers 们使用了总结一种实践模式
首先提取所有需要的参数到一个独立的结构体 Options,当然你也可以用 Configs 啥的.
然后为每个参数提供设置函数
这样我们就为每个参数设置了独立的设置函数 。返回值func(*Options)看着有点不友好,我们提取下定义为单个Option调整一下代码
当我们需要添加更多的参数时,只需要在 Options 添加新的参数并添加新参数的设置函数即可 。
比如现在要添加新的参数 Timeout
这样后续不管新增多少参数 , 只需要新增配置项并添加独立的设置函数即可轻松扩展 , 并且不会影响原有函数的参数顺序和个数位置等 。
至此,每个选项是区分开来了,那么怎么作用到我们的 Client 结构体上呢?
首先,配置选项都被提取到了 Options 结构体重 , 所以我们需要调整一下 Client 结构体的参数
其次,每一个选项函数返回 Option,那么任意多个就是 ...Option,我们调整一下构造函数 NewClient 的参数形式,改为可变参数,不再局限于固定顺序的几个参数 。
然后循环遍历每个选项函数,来生成Client结构体的完整配置选项 。
推荐阅读
- 毕业设计主题网络图怎么写,毕业设计主题网络图怎么写好
- 小新15什么cpu,小新15什么时候更新win11
- 怎么设置电脑截图快捷键,电脑最简单的截图方法
- 素描教程下载,素描教程app下载
- go语言的指针和结构体 go语言指针和c++一样吗
- sap接口开发fs,sap接口开发与实现
- 华为鸿蒙操作界面3.0,华为鸿蒙操作界面30怎么设置
- 直播小熊什么软件,直播用小熊直播怎么弄的
- c语言中断函数标识 c语言中的中断