![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GO
文章平均质量分 67
默子昂
9成的错误都是人为的
展开
-
Golang学习(三十五) go 连接redis
在编程的时候,连接数据库进行存储操作是必不可少的,这里我们去连接redis数据库第三方开源库go get -v github.com/garyburd/redigo/redis这种第三方的包没有像是之前那种的文档可以查看,不过我们可以通过idea查看随便输入下报名和方法 package mainimport ( "github.com/garyburd/redigo/redis")func main(){ redis.}我们上面输入了一个redis.包..原创 2022-03-14 10:54:30 · 11513 阅读 · 1 评论 -
Golang学习(三十四) tcp编程
Golang的主要设计目标之一,就是面向大规模后端服务程序网络通讯这块是服务端程序,必不可少也是至关重要的的网络编程网络编程主要分为tcp和http编程,如下1、TCP socket编程 //是网络编程的主流, 之所以叫TCP socket编程 //是因为底层是基于TCP/IP协议的,比如QQ2、http编程 //(b/s)模式 浏览器去访问服务器时使用的就是http协议 //而http底层依旧是用的tcp.原创 2022-03-11 16:46:56 · 3136 阅读 · 0 评论 -
Golang学习(三十三) 反射
一、基本介绍1、反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind)2、如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法)3、通过反射,可以修改变量的值,可以调用关联的方法1、重要的函数func TypeOf(i interface{}) Typefunc ValueOf(i interface{}) Value以上函数都是空接口类型,可以传入任意值,之后我们将得到一个type和Value类型变量这里的ty...原创 2022-03-09 15:00:44 · 2389 阅读 · 0 评论 -
Golang学习(三十三) 管道综合案例
综合案例1要求1、开启一个writeData协程,向管道intChan中写入50个整数2、开启一个readData的协程,从管道intChan中读取writeData写入的数据3、注意: writeData和readDate操作的是同一个管道4、主线程需要等待writeData和readData协程都完成工作才能退出思路分析 1、我们先定义两个管道"intChan(存储管道)"和"exitChan(退出管道)"2、然后在主线程上开启两个协程"writeData"和..原创 2022-03-08 17:04:59 · 548 阅读 · 0 评论 -
Golang学习(三十二) 互斥锁与管道
我们上一章了解了什么是协程,我们在开始前先做一个练习练习目标 我们现在要计算1-200的各个数的阶乘,并且把每个数的阶乘放入到map中最后显示出来,要求使用goroutine完成package mainimport ( "fmt")var ( myMap = make(map[int]int,10) //声明一个map用来存放阶乘)func test(n int) { //编写函数test 计算阶乘并写入到map中 res :=.原创 2022-03-08 16:44:09 · 836 阅读 · 0 评论 -
Golang学习(三十一)go协程
引言假设,我们现在要求统计40000000的数字中,那些是整数?按照我们前面的思路就是直接使用for循环,然后去判断这些是不是整数,如下main.gopackage mainfunc Sum() { var xx []int for i := 0; i < 40000000;i++{ if i % 2 == 0 { xx = append(xx,i) } }}func main(){ Sum()}main_test.gopacka原创 2022-03-08 14:14:10 · 6575 阅读 · 0 评论 -
Golang学习(三十)单元测试
我们在开发之中可能需要测试某个函数的返回值是否正常我们传统的测试方法是在main函数中去调用测试,如下package mainimport "fmt"func AddUpper(n int) int { res := 0 for i :=1; i <=n; i++{ res += i } return res}func main(){ res := AddUpper(10) //55 if res != 55{ fmt.Printf("AddUpper.原创 2022-03-07 16:28:41 · 596 阅读 · 0 评论 -
Golang学习(二十九)序列化和反序列化
我们不同编程语言之间的数据是无法直接交互的,我们想要解决这个问题就需要将不同语言之间传输的数据做一个统一规范,而json是目前最流行的数据格式一、json格式1、json是什么json 是一种数据交换格式,主要是将要传输的数据转换为json特有的格式其他人拿到这个json数据后,可以通过数据反向转换得到转换前的数据这样大家都将数据转为json格式,谁用就拿过来转换为自己识别的数据即可2、json数据格式说明JSON 依赖key-value 键值对形式来保存数据,.原创 2022-03-07 14:48:56 · 4089 阅读 · 1 评论 -
Golang学习(二十八)cobra 编写kubectl案例
前面我们已经基本了解cobra的使用方法,现在我们去简单做一个小工具加深印象构建命令kubectlcobra init kubectl修改配置vi root.gopackage cmdimport ( "fmt" "github.com/spf13/cobra" "os" "path/filepath")//定义一下主体命令变量var rootCmd = &cobra.Command{ Use: "kubectl", Args: cob..原创 2022-03-04 16:03:55 · 948 阅读 · 0 评论 -
Golang学习(二十七)强大的命令行工具cobra
"cobra" 命令行解析工具,在Kubernetes代码中我们也能经常看到他的身影项目地址https://github.com/spf13/cobra一、命令行工具基本概念一个好的命令工具,读起来应该像一个句子一样。比如git clone URL --bare//git 就是可执行文件名//clone 就是命令(Command)//URL 就是事务(Arg) 参数//--bare 就是修饰动作的Flag 预定义1、命令行工具的格式[appNam...原创 2022-03-04 14:14:36 · 2441 阅读 · 0 评论 -
Golang学习(二十六)命令行参数获取
os包中的Args是一个string的切片,用来存储所有的命令行参数案例package mainimport ( "fmt" "os")func main(){ fmt.Println("命令行的参数有",len(os.Args)) //变量os.Args切片,会将所有命令行参数存储到os.Args切片中 //然后我们通过for-range去遍历切片打印出传入的参数 for i,v := range os.Args{ fmt.Printf("args...原创 2022-03-03 17:20:19 · 843 阅读 · 0 评论 -
Golang学习(二十五)文件操作
文件在程序中是以流的形式来操作的在GO语言中有个OS包是专门用来对文件做操作的,打开官方文档Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国找到type file 结构体,这个结构体下定义了大量针对文件操作的方法 一、读取文件1、打开、关闭文件#打开文件func Open(name string) (file *File, err error)#关闭文件func (f *File) Close()...原创 2022-03-03 11:43:09 · 2393 阅读 · 0 评论 -
Golang学习(二十四)家庭记账项目
一、项目开发流程需求分析-->设计阶段-->实现阶段(代码)-->测试阶段-->实施阶段-->维护阶段二、项目需求说明1、模拟实现基于文本界面的 《家庭记账软件》2、该软件能够记录家庭的收入、支出,并能够打印收支明细表3、项目采用分级菜单方式,主菜单如下三、代码实现目标编写文件main.go 完成基本功能1、 先可以显示主菜单,并且可以退出2、 完成可以显示明细的功能3、 完成登记收入的功能4、 完成支出功能功能1 ...原创 2022-02-28 16:21:45 · 625 阅读 · 0 评论 -
Golang学习(二十三)多态与类型断言
package mainimport ( "fmt")//定义一个生物大全type biology struct { Monkey //猴子 Bird //小鸟}//猴子type Monkey struct { Name string}//猴子的本命技能func (this *Monkey) climbing() {fmt.Println(this.Name,"生来会爬树")}//小鸟type B.原创 2022-02-28 14:50:34 · 515 阅读 · 0 评论 -
Golang学习(二十二) 接口
一、什么是接口假设我现在有3个设备,手机、相机、笔记本我想将手机或相机里的照片传输到笔记本上,我们就必须要链接笔记本的USB口这个USB口就相当于一个接口,他定义了一个连接的规范go在golang中接口和USB的机制类似,我们会给go中的接口定义1一个或多个这种连接的规范必须满足所有连接的规范,才能够去调用这个接口二、快速入门1、定义接口type Usb interface{ //定义接口 也是用type,类型位置写interface即可 Start()原创 2022-02-25 11:59:28 · 1360 阅读 · 0 评论 -
Golang学习(二十一) 面向对象--继承
什么是继承,为什么要继承 我们先看一个案例package mainimport "fmt"//比如我们现在有个需求,打印一个小学生的成绩和基本信息,则代码如下type Pupil struct{ Name string Age int Score int}//为Pupil绑定3个方法,显示func (p *Pupil) ShowInfo(){ fmt.Printf("学生名=%v 年龄=%v 成绩=%v\n",p.Name,p.Age,p.Score)}// 设置.原创 2022-02-24 16:03:00 · 1707 阅读 · 0 评论 -
Golang学习(二十) 工厂模式、封装
我们前面有了解到,在一个包中定义的对象名称必须是大写才能在其他的包中进行使用但在不同的包调用时会出现一个问题,我在两个包中定义了相同名称的对象,那么我们就必须要用小写来避免重复所以我们需要将对象的名称小写,然后通过工厂模式来调用不同包中小写开头的对象创建新目录modelmkdir modeltouch model/mode.go在mode.go中添加一个结构体案例1 结构体对象小写调用方法先定义一个正常的结构体包调用package modelt...原创 2021-11-30 10:52:31 · 635 阅读 · 1 评论 -
Golang学习(十九) 方法
在上一节,我们学习了定义一个结构体,比如一只猫,它有自己的名字、年龄、花色,然而这些都是一些静态信息,猫猫还会有很多的行为动作,比如奔跑、恰饭、鄙视你等等,而这些动作的实现就依赖于方法了 golang中的方法是作用在指定的数据类型上的。 即:和指定的数据类型绑定,因此自定义的数据类型都可以有方法,不仅仅是结构体有)方法声明的格式func (变量 自定义数据类型) 方法名(){ 代码块}案例package mainimport ( "fmt"...原创 2021-11-26 16:20:05 · 624 阅读 · 0 评论 -
Golang学习(十八)结构体
什么是结构体结构体的概念比较抽象,他是存放多种数据类型的一个模板他会抽象出一些具体事务的特性,比如我们把猫当作一个结构体,那么猫的特性如下猫|--名称 |--年龄|--颜色我们抽象了一些信息,但又没有去定义这些信息的具体内容,只是提供了一个模板在使用时,我们会将这个模板的格式拷贝一份,在根据他的一个格式进行信息的填写(感觉在登记信息)先回顾一些东西package mainimport "fmt"type inttest int //前面我们在基本数据类原创 2021-11-26 11:38:40 · 1758 阅读 · 0 评论 -
Golang学习(十七)Map
map是key-value数据结构,类似于其他语言的集合、字典,在go中被称为"关联数组"基本语法var 变量名称 map[键类型]值类型//golang中的map的类型可以是bool、数组、string、指针、channel、接口、结构体、map#声明案例var a map[string]stringvar a map[string]intvar a map[int]stringvar a map[string]map[string]string //map也可以以map作.原创 2021-11-25 17:38:28 · 1558 阅读 · 0 评论 -
Golang学习(十六) 切片
为什么要切片假设我们需要一个数组用于保存学生的成绩,但是学生的个数是不确定的,数组如果开太小不够用,开太大浪费。切片,可以看作是一个动态的数组保存个数不确定的数据,也可以看作是一个可以动态扩展的数组类型基本介绍1. 切片的英文是slice2. 切片是数组的一个引用,因此切片是引用数据类型,在进行传递时,遵守引用传递的机制3. 切片的使用和数组相似,遍历切片、访问切片的元素和求切片长度len(slice)都一样4. 切片的长度是可以变化的,因此切片是一个可以动态变化数组切片.原创 2021-11-23 16:53:04 · 1504 阅读 · 1 评论 -
Golang学习(十五) 数组排序和二分查找
排序 是将一组数据,依指定的顺序进行排列的过程常见排序方法1. 内部排序 //指将需要处理的所有数据都加载到"内存"进行排序 适合数据量较小时使用 //包括"交换式排序法"、"选择式排序法"和"插入式排序法" 2. 外部排序法 //数据量过大,无法全部加载到内存重,需要借助外部存储进行排序 //包括"合并排序法"和"直接合并排序法"一、交换式排序法交换式排序法属于内部排序法,是运用数据的值..原创 2021-11-23 15:18:33 · 592 阅读 · 0 评论 -
Golang学习(十四)数组
数组,可以存放多个相同类型数据的一种特殊的数据类型,并且他是值类型的一、基本语法及案例演示语法格式var 变量名称 [空间大小]数据类型//我们在创建数组的时候会指定这个数据的空间有多大//如://var hens [6]float64//定义一个hens的数组, 空间大小位6,允许存放6个float64的值案例假设有一个养鸡场有6只鸡,他们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg那这6只鸡 的总体重是多少?平均体重是多少?..原创 2021-11-19 16:15:36 · 1882 阅读 · 0 评论 -
Golang学习(十三)指针
一、内存地址在了解指针之前,我们需要先知道什么是内存地址。先看下面的代码,我们定义var i int = 10的变量package mainimport "fmt"func main(){ var i int = 10 fmt.Println(i)}在我们定义变量的时候,他会在内存空间分配一块区域,来存放我们的值但是这个内存空间 本身也是有一个地址的,那么我们怎么拿到这个内存地址呢 "&"获取变量的内存地址package mainimp.原创 2021-11-18 16:42:43 · 1395 阅读 · 1 评论 -
Golang学习(十二) 错误处理、自定义报错
先看一段代码,其中我们尝试用10 去除以0,编译是通过的,但是在运算时会报错package mainimport{ "fmt"}func test(){ num1 := 10 num2 := 0 res := num1 / num2 //错误,不能除以0 fmt.Println("res=",res)}func main(){ test() fmt.Println("下面的代码和逻辑")}返回panic: runtime error: int.原创 2021-11-18 15:17:00 · 1250 阅读 · 0 评论 -
Golang学习(十一) 时间日期函数
时间日期函数来自于time包1、获取当前日期package mainimport ( "fmt" "time")func main() { now := time.Now() //time.Now() 获取当前日期 fmt.Println(now)}返回2021-11-18 11:05:28.0030785 +0800 CST m=+0.0049480012、获取指定时间日期package mainimport ( "fmt" "time"..原创 2021-11-18 11:29:48 · 1305 阅读 · 0 评论 -
Golang学习(十) 常用字符串函数
Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国Go语言文档中文版,Go语言中文网,中国 Golang 社区,Go语言学习园地,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。分享 Go 语言知识,交流使用经验https://studygolang.com/pkgdoc1、统计字符串的长度,按照字符(len)package mainimport "fmt"func main() { str := "hello呗" /.原创 2021-11-17 16:09:34 · 706 阅读 · 0 评论 -
Golang学习(九) 延时机制defer
在函数中,我们需要创建资源(比如: 数据库连接、文件句柄、锁等)为了在函数执行完毕后,及时释放资源,Go的设计者提供"defer"(延时机制)1. 当go执行到一个defer后的语句时,会将defer后的语句先压入到一个栈中,然后继续执行函数下一个语句2. 当函数其他命令执行完毕后,在从defer栈中,依次从栈顶去除语句执行 (注: 遵守栈 先进后出的机制来输出)3. 在defer将语句放入到栈中时,也会将相关的值拷贝同时入栈案例1package mainimp.原创 2021-11-17 15:32:43 · 712 阅读 · 0 评论 -
Golang学习(八) init函数、匿名函数、闭包
一、init函数init初始化函数,会在main函数执行前执行,如果import了其他的包中包含init函数那么他会优先去扫描导入包中的init函数并执行案例1package mainimport "fmt"func init() { fmt.Println("test main init")}func main(){ fmt.Println("echo main")}返回test main initecho main#init函数会在mai.原创 2021-11-17 15:11:30 · 597 阅读 · 0 评论 -
Golang学习(七) 函数、包、标识符
函数,相当于打包了一段代码为一个整体,当我们需要多次调用相同的一段代码的时候,只要通过调用函数的名称,就能执行一段定义好的代码程序一、函数函数定义格式func 函数名 (形参列表) 返回值列表{ 代码块 return 返回值列表}1. 形参列表 #表示函数的输入2. 代码块 #具体实现功能的命令3. 返回值列表 #函数可以有返回值,也可以没有案例1 基本使用package mainimport "fmt"func tes.原创 2021-11-17 10:43:03 · 565 阅读 · 0 评论 -
Golang学习(六) 常量
常量与变量不同,常量是指在程序运行时,"不会被修改的量"定义格式const identifier [type] = value#常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。定义常量#显式类型定义const b string = "abc"#隐式类型定义const b = "abc"#多个相同类型的声明可以简写为:const name1, name2 = value1, value21、常量枚举常量可以用len() ca..原创 2021-11-16 17:41:03 · 324 阅读 · 0 评论 -
Golang学习(五) printf格式化输出
前面我们在学习的时候经常会见到 fmt.Printf(%xxx,变量) 这种格式化输出但具体不清楚有那些,这里就小小的整理一下 或者去下面的网站去查,更详细Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国Go语言文档中文版,Go语言中文网,中国 Golang 社区,Go语言学习园地,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。分享 Go 语言知识,交流使用经验https://studygolang.com/pkgdoc1、通用..原创 2021-11-16 15:46:47 · 1987 阅读 · 0 评论 -
Golang学习(四) 基本数据类型
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间基本数据类型整数类型(int int8 int16 int32 int64, uint,uint8,uint16,uint32,uint64,byte)(字节数)浮点数 (float32 float64)字符型 没有专门的字符型,使用byte来保存单个字符"字母"(不能用汉字)布尔型 bool字符串型 string一、整数型顾名思义,就是整数,不同的类型,占用的内存空间也不同案例 int..原创 2021-11-16 15:15:49 · 1006 阅读 · 0 评论 -
Golang学习(三) 接收用户输入
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取步骤1. 导入fmt包2. 调用fmt包中的fmt.Scanln() 或者fmt.Scanf()案例要求可以从控制台接收用户信息(姓名、年龄、薪水)1. 使用fmt.Scanln() 获取2. 使用fmt.Scanf() 获取package mainimport "fmt" //导入fmt包func main() { var ( //定义所需变量 name string ..原创 2021-11-16 11:36:13 · 807 阅读 · 0 评论 -
Golang学习(二) 官方文档、转义字符、变量定义
#官方文档https://golang.org/#官方文档是不错,但是国内访问并不方便,所以我们经常用下面的#golang标准库api文档https://studygolang.com/pkgdocgolang程序编写规则go 的后缀 是 .gogo程序区分大小写go的语句 不需要带分号go定义变量,或者import包,必须使用go 中,不要把多条语句放在一行go的大括号成对出现go的转移字符\t #制表位,实现对齐的功能,通常用来排版\n ...原创 2021-11-16 11:13:02 · 1248 阅读 · 0 评论 -
Golang学习(一) GO环境搭建
windows版本go安装教程网上很多,这里就不复制黏贴了这里说下linux怎么安装 我的环境 Centos 7.6 #方便查看目录结构,装个treewget -O/etc/yum.repos.d/aliyun-yilai.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum -y install tree#拉取go 软件包 (1.17 目前是比较新的版本)wget https://dl.google.com/go/go1....原创 2021-11-16 10:16:58 · 1038 阅读 · 2 评论