1.6管道(异步) 数据处理者处理完数据后将数据放入缓冲区中,数据接收者从缓冲区中获取数据,处理者不用等待接收者是否准备好处理数据 为什么需要 channel: 前面使用全局变量加锁同步来解决 goroutine 得通讯,但是不够完美。 主线程在等待所有 goroutine 全部完成的时间很难确定。 如果主线程休眠时间长了,会加长等待时间,如果等待…
并发编程 并发编程开发将一个执行的过程按照并行算法拆分为多个可以独立执行的代码块,从而充分利用多核和多处理器提高系统吞吐率 goroutine(协程) 和 channel(管道) goroutine 可以做并发和并行的处理,可以将一个任务分解为多个 goroutine 去完成,让多个 cpu 去处理 需求: 要求统计 1-20000 的数字中,那些…
2 反射 反射是指在运行时动态的访问和修改任意类型对象的结构和成员,在 go 语言中提供 reflect 包提供反射的功能,每一个变量都有两个属性:类型(Type)和值(Value) 1.相关功能 reflect 2.反射技术应用 3.相关功能底层技术使用了反射技术 2.1 json json 其实就是格式化的字符串。 我们在做文件操作的时候呢,不…
接口与反射 go 中不需要声明 接口 与相关赋值接口和结构体的关系 只要调用了对应的接口里面所有的方法,我们就认为实现了接口 面向对象: 封装:将属性隐藏(结构体属性),提供相关接口供调用者访问和修改,调用的人不用关心我内部实现。 比如User{} 结构体里面,我们在设置 age 的时候,不可能说超过 200 岁,所以这个时候我们就要给他加一个 S…
[TOC] 文件与 IO 操作 基本操作(不带缓冲 IO):读、写 标准输入、输出、错误 带缓冲的 IO 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音... 程序的路径: 文件类型: 我们…
[TOC] 4 自定义类型&结构体定义 结构体默认是值类型 结构体是自定义类型的一种,在学结构体之前我们需要了解一下自定义类型 面向对象三大思想: 封装:在 go 里面实现封装就是用的结构体,将一堆属性不同的数据放到一起 继承:在其他代码段中可继承父代码的内容 多态:go 中没有比较好的多态示例 4.1 自定义类型 在 GO 里面是支持自定…
实现自动创建容器及外部执行容器命令工具 1 工具设计概念 需求: 由于公司专门为其他业务部门提供了 paas 平台操作,但是有的业务部门的同事不太习惯使用 web 页面,所以我们不得不为他们提供后台的 kubectl 终端对他们的业务 NS 进行管理。 而领导的解决方式是通过在 K8S 上通过 UA 生成单独的用户来实现对业务的 NS 进行管理,并…
错误+延迟执行+panic&recover+单步调试 1 error 接口 Go 语言通过 error 接口实现错误处理的标准模式,通过使用函数返回值列表中的最后一个值返回错误信息,将错误的处理交由程序员主动进行处理 在程序中运行时错误错误一般分为两种: 可恢复的错误(重试/或忽略) 不可恢复的错误(程序退出) 范例代码: package …
函数类型+匿名函数+闭包 函数也可以赋值给变量,存储在数组、切片、映射中,也可作为参数传递给函数或作为函数返回值进行返回 通过函数类型,我们也可以定义一些集合类型,比如切片的映射的 函数类型的意义: 函数类型可以把函数作为参数传递到其他的函数中 1 函数类型 函数类型:由参数的数量和他的类型,还有返回值的数量和类型组成 package main i…
递归-阶乘&阶乘算法&汉诺塔 1 递归 递归是指函数直接或间接调用自己,递归常用于解决分治问题,将大问题分解为相同的小问题进行解决,需要关注终止条件 我们每做一个递归的时候一定要判断清楚递归的结束条件是什么 阶乘 package main import "fmt" func fact(n int) int { /…