golang
XieHZ同学
高强度的有效学习,
是由弱变强的唯一途径。
【行动、勤奋、自信、梦想】
【拖延、懒惰、恐惧、失败】
展开
-
r1笔记day28 单元测试(T类型)
Go自带了测试框架和工具,在testing包中,以便完成单元测试(T类型)和性能测试(B类型)。一般测试代码放在*_test.go文件中,与被测代码放于同一个包中。单元测试测试函数名称格式是:Test[^a-z],即以Test开头,跟上非小写字母开头的字符串。每个测试函数都接受一个*testing.T类型参数,用于输出信息或中断测试。测试方法有:Fail: 标记失败,但继续执行...原创 2020-01-14 09:58:46 · 220 阅读 · 0 评论 -
r1笔记day27 goroutine and channel
一个简单的例子:package mainimport ( "fmt" "time")func test() { var i int for { fmt.Println(i) time.Sleep(time.Second) i++ }}func main() { go test() for { }}例子2:package mainim...原创 2020-01-05 02:34:22 · 167 阅读 · 0 评论 -
r1笔记day26 错误处理
自定义err的输出:package mainimport ( "fmt" "os" "time")type PathError struct { path string op string createTime string message string}func (p *PathError) Error() string {...原创 2020-01-03 18:12:43 · 151 阅读 · 0 评论 -
r1笔记day25 json协议以及反序列化样例
分别对struct、slice、基本类型、map进行序列化和反序列化:package mainimport ( "encoding/json" "fmt")type User struct { UserName string `json:"username"` //改变json打包的key,将大写变成小写 NickName string `json:"nickname"`...原创 2020-01-03 02:17:17 · 679 阅读 · 0 评论 -
r1笔记day25 json协议以及序列化样例
传输的标准:Golang--(序列化)-->json字符串--(网络传输)-->程序--(反序列化)-->其他语言json数据协议:导入包 encoding/json序列化:json.Marshal(data interface{})反序列化:json.UnMarshal(data []byte,v interface{})案例:分别对 struct...原创 2020-01-03 01:10:59 · 642 阅读 · 0 评论 -
r1笔记day24 golang package的理解与使用
1、package中可以用的东西package里面有type,func,interface{},const这些可以用的。2、package中func{} 与 type的使用比较简单,开箱即用:比如这个os package,里面除了很多 方法之外,还定义了很多type,这些type,又有很多的方法可以用。比如说,定义一个 os.File 的file,接着,就可以用os.File这...原创 2019-12-29 21:26:50 · 149 阅读 · 0 评论 -
r1笔记day24 文件的操作以及命令行参数flag包的使用
概要:文件的读写操作,各种姿势的,比如直接读写,带缓存的读写,利用io/ioutil包 等。packag中包的使用,以及加深对package的理解。命令行参数原始处理以及利用flag包来处理,同时,还可以利用flag包读取配置文件,然后进行初始化参数配置等。下面正文:一、打开压缩文件:文件直接读/带缓存的读/ioustiopackage mainimport ...原创 2019-12-29 21:48:28 · 310 阅读 · 0 评论 -
r1笔记day23 终端读写
操作终端相关文件句柄常量os.Stdin:os.Stdout:os.Stderr:终端读写示例:package mainimport "fmt"type Student struct { Name string Age int Score float32}func main() { var str = "stu01 18 89.22" var st...原创 2019-12-29 01:20:42 · 76 阅读 · 0 评论 -
r1笔记day23 VSCode golang插件安装
VSC的golang的插件因为墙的原因,不方便直接安装,手动设置代理,然后执行go get进行安装。首先,go env设置代理,开启GO111MODULE:go env -w GOPROXY=https://goproxy.cn,direct# Set environment variable allow bypassing the proxy for selected modules...原创 2019-12-28 21:07:53 · 245 阅读 · 0 评论 -
r1笔记day23 负载均衡 3
需要添加支持用户自定义的算法,这样怎么实现呢?可以通过添加一个调度算法管理的模块,对系统提供的,自定义的调度算法进行管理。并且动态地添加支持。实现一个支持负载均衡管理的类:(如果VSC保存时候,没有自动调整格式,那就是代码有问题了,struct初始化时候每一行需要 逗号 "," 。 不然回报错:“syntax error: unexpected newline, expecting comma...原创 2019-12-27 15:34:37 · 227 阅读 · 0 评论 -
r1笔记day22 负载均衡 2
fmt这个包,有个String的接口,如果实现了,就会调用,然后进行格式化。实现了接口,就可以自定义输出。在调用实现了这个接口的类,就会自动调用string进行格式化。比如instance这个结构体实现了String,在fmt.Println() 时候,就会自动调用String这个接口,去格式化。//实现String接口func (p *Instance) String() strin...原创 2019-12-27 02:03:09 · 301 阅读 · 0 评论 -
r1笔记day21 写一个负载均衡
这个是视频教程学习golang的例子,纯属练手,非生产使用:学习了一下项目的规划,各个package怎么管理的。step1:先定义一个负载均衡的接口Balancer,接口里面有DoBalance([]*Instance) (*Instance, error) 方法。step2:创建instance的结构体,由于字段是小写的,写一个构造函数用来访问,同时,提供两个函数GetHost()...原创 2019-12-26 00:39:07 · 160 阅读 · 0 评论 -
r1笔记day21_2 Go golang输出圣诞树(自娱自乐)
今天圣诞节,然后用很笨拙的golang,写了一颗圣诞树:package mainimport "fmt"func printer(b bool) { switch b { case true: fmt.Printf("*") case false: fmt.Printf(" ") }}func main() { fmt.Println() var flag ...原创 2019-12-25 22:53:06 · 776 阅读 · 0 评论 -
r1笔记day20_03 Go reflect 2
下面通过修改int值的例子,学习type Value,以及提供的方法Elem(),这个方法就相当于提供了指针,并指向了这个变量,就可以修改值了。利用反射操作Int,比如说修改int的值package mainimport ( "fmt" "reflect")//利用反射,修改值,提供了Elem(),这个方法,相当于一个指针指向变量func TestInt(b interf...原创 2019-12-24 01:16:54 · 118 阅读 · 0 评论 -
r1笔记day20_02 Go reflect1
反射:可以在运行时动态获取变量的相关信息, “reflect” 这个包,状态转换如:变量<===>Interface{} <===>Reflect.Value看一下reflect这个包,type value部分,将一个变量,转换成 reflect.Value之后,提供了很多方法分析这个变量,可以做下面这么多事情。也就是说可以动态地处理很多事情。获取运行时的详细信息。...原创 2019-12-24 00:16:43 · 79 阅读 · 0 评论 -
r1笔记day20_01 Go Interface4
判断一个变量是否实现了指定接口:定义一个接口变量,然后将类型赋值给接口变量,再用 ok去判断是否实现了指定接口。有点像 interface里面装了int一样,虽然type输出是int,但是是用 空的interface{} 装的。func main() { //定义一个变量,由于file实现了rw方法,使用,可以调用接口的方法。 var f File Test(&f) va...原创 2019-12-23 22:40:23 · 142 阅读 · 0 评论 -
r1笔记day19_02 Go Interface3
实现了接口的任何类型,都可以调用接口的函数。如下图所示,构建一个实现了RW的File,然后,就可以用Test函数处理。(画完下面的这张图,这样子看起来比较好理解,看来要多画图)package mainimport ( "fmt")type Reader interface { Read()}type Writer interface { Write()}/...原创 2019-12-22 00:53:00 · 128 阅读 · 0 评论 -
r1笔记day19_01 UberGo编程规范
github上的地址:https://github.com/xxjwxc/uber_go_guide_cn目录如下:介绍 指导原则 指向 interface 的指针 接收器 (receiver) 与接口 零值 Mutex 是有效的 在边界处拷贝 Slices 和 Maps 使用 defer 释放资源 Channel 的 size 要么是 1,要么是无缓冲的 枚举...原创 2019-12-21 16:49:48 · 111 阅读 · 0 评论 -
r1笔记day18 Golang接口2
对golang interface的深入理解(更深入的待后面学习了继续):比如下面这个sort:func Sort(data Interface)type Interface interface { // Len is the number of elements in the collection. Len() int // Less...原创 2019-12-20 00:51:38 · 101 阅读 · 0 评论 -
r1笔记day17 golang接口
面向接口的编程Interface 类型可以定义一组方法,但是这些不需要实。并且interface不能包含任何变量,但是有参数。好处是什么呢:定义好接口,然后各自去实现。去学习别人的接口。实际项目中,最好抽象成接口,比如负载均衡,定义好轮训方法,直接换一下接口就好,底层怎么实现不管。这样就不需要改业务代码,就可以实现切换。type exampler interface{ M...原创 2019-12-18 00:59:19 · 103 阅读 · 0 评论 -
r1笔记day16 图书管理系统
实现一个图书管理系统,具有以下功能:a、书籍录入功能,书籍信息包括书名、副本数、作者、出版日期b、书籍查询功能,按书名、作者、出版日期等条件检索c、学生信息管理功能,管理每个学生的姓名、年纪、身份证、性别、借了什么书等信息d、借书功能,学生可以查询想要的书籍,进行借出e、书籍管理功能,可以看到每种书被哪些人借出了。目录结构:PS F:\go\src\go_dev\da...原创 2019-12-17 01:24:24 · 134 阅读 · 0 评论 -
r1笔记第15天 Golang(15)
a、结构体中的方法:定义一个结构体student,然后给结构体 添加方法,结构体作为接收者,类似插件一样加上去。注意 *T 与T 类型的接收者互相转换,golang这个做的很好,降低了使用难度。b、方法的的组合和匿名字段:如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现了继承,如果一个struct嵌套了另一个有名结构体,那么这个模式就叫组合。如果s...原创 2019-12-15 01:37:13 · 108 阅读 · 0 评论 -
r1笔记第14天 Golang(14)
type 定义的都是类型,可以给类型起别名,但是, 别名和类型属于不同类型,要赋值,需要类型转换。package mainimport ( "fmt")type integer intfunc main() { var i integer = 1000 var j int fmt.Println(i,j) //j = i error:cannot use i (...原创 2019-12-14 02:39:43 · 105 阅读 · 0 评论 -
r1笔记第13天 Golang(13)
二叉树定义:type Student struct{ Name string left* Student right* Student}如果每个节点有两个指针分别用来指向左子树和右子树,我们把这样的结构叫做二叉树。广度、深度 优先的问题。package mainimport ( "fmt")type Student struct{ Name...原创 2019-12-13 01:18:32 · 75 阅读 · 0 评论 -
r1笔记第12天 Golang(12)
链表的尾部插入:先定义一个入口,接着批量插入。单向链表,需要先定义一个入口,然后定义一个临时指针变量,存储这个入口的地址,利用for循环,指针变量作为节点临时存储的中间值,同时,指针变量的next指向下一个节点的地址。多加了个%T查看类型,%p查看具体的地址,发现,程序会先把内存申请好,然后才开始工作。另外,内存结构确实是一个接着一个的。for循环中,变量操作与地址操作 var stu...原创 2019-12-12 00:53:58 · 92 阅读 · 0 评论 -
r1笔记第11天 Golang(11)
golang单链表的例子:定义一个struct Student,接着实例化3个,然后串起来, 注意遍历的时候,是通过判断 p.Next 是否是 nil 来决定是否到了链的末尾。如果变成环,那就会不停地输出,停不下来。注意,遍历的函数需要在最后进行输出,不然会漏掉最后一个值。func trans( p *Student) { for p.Next != nil{ fmt.Pri...原创 2019-12-11 01:17:10 · 86 阅读 · 0 评论 -
r1笔记第10天 Golang(10-2)
结构体:struct结构体的声明:type 标识符 struct{ field1 type field2 type}例子:type Student struct{ Name string age int}结构体的访问,和其他语言一样,使用点例子:var stu Studentstu.Name = "tony"stu.Age ...原创 2019-12-10 00:10:23 · 91 阅读 · 0 评论 -
r1笔记第10天 Golang(10-1)
example01:冒泡排序利用切片传参,因为可变长的,数组是固定长度的。先梳理清楚冒泡排序的逻辑,冒泡排序原理:a[0]开始,与后面的数字对比,比a[0] 大的,就取代a[0]的位置,接着是a[1], 最后到a[len(a)] 比较完毕,输出结果。package mainimport ( "fmt")func bsort(a []int) { for i := ...原创 2019-12-09 23:16:52 · 136 阅读 · 0 评论 -
r1笔记第9天 Golang(09)
下面开始进入 包的学习:1、golang中的包 a、golang目前有150个标注你的包,覆盖了几乎所有的基础库。 b、golang.org有所有包的文档。2、线程同步: a、import("sync") b、互斥锁,var mu sync.Mutex: 写多读少的情况下,用互斥锁。 c、读写锁, var mu syn...原创 2019-12-09 01:26:34 · 110 阅读 · 0 评论 -
r1笔记第9天 Golang(08)
example01:因为map是无序的,返回的结果随机,可以通过slice,然后进行sort进行排序。package mainimport ( "fmt" "sort")func testMapSort() { var a map[int]int a = make(map[int]int,5) a[8] = 10 a[3] = 10 a[11] = 10 a[1]...原创 2019-12-08 19:51:56 · 77 阅读 · 0 评论 -
r1笔记第8天 Gloang(07)
example01:数组是个值引用,要是要进行排序,需要传个切片进去。然后用sort进行排序。(string float 什么的也一样进行)package mainimport ( "fmt" "sort")func testIntSort() { var a = [...]int{4,77,8,1,234,66} sort.Ints(a[:]) fmt.Pri...原创 2019-12-08 01:10:28 · 128 阅读 · 0 评论 -
r1笔记第7天 Golang(06)
example01:闭包:一个函数和语气相关的引用环境及组合而成的实体。看一下函数和哪个变量进行绑定。比如下面的和 x进行了绑定,也就是说,运行过程中,会保留值。这样子好处是,只要写一次函数,就可以实现多个功能。package mainimport ( "fmt" "strings")func Adder() func(int) int { var x int r...原创 2019-12-07 00:31:35 · 103 阅读 · 0 评论 -
r1笔记第6天 Golang(05)
内置函数:close,主要用于关闭channel len:用来求长度,比如string、array、slice、map、channel new:用来分配内存,主要用来分配值类型,比如int,struct。返回的是指针 make:用来分配内存,主要用来分配引用类型,比如chan、map、slice append:用来追加元素到数组、slice中 panic和recover: 用来错误处...原创 2019-12-06 00:08:47 · 110 阅读 · 0 评论 -
r1笔记第5天 Golang(04)
视频教程学习笔记,欠缺的是注释和框架,后面注意下,另外,最好自己再写一遍。不然只会模仿。example01:统计输入的一串数字的字母,空格,数字的数量。package mainimport ( "fmt" "os" "bufio")func process(str string)(wordCount,spacecount,nuberCount,otherCount int...原创 2019-12-05 01:01:08 · 90 阅读 · 0 评论 -
r1笔记第4天 Golang(03)
写代码时候,要记得: 模块功能-->实现逻辑-->具体实现example01:9*9乘法表。package mainimport ( "fmt")func multi(){ for i := 1; i<=9;i++{ for j := 1; j<=i;j++{ fmt.Printf("%d*%d=%d ",i,j,i*j) } fm...原创 2019-12-04 01:00:57 · 118 阅读 · 0 评论 -
r1笔记第3天 Golang (02)
example01:定义两个常量Man=1 和Female=2,获取当前时间的秒数,如果能被Female整除,则在终端打印femal,否则打印man。main.gopackage mainimport ( "fmt" "time")const ( Man = 1 Female = 2)func main() { for i :=0;i<10;i++ {...原创 2019-12-02 18:16:59 · 94 阅读 · 0 评论 -
r1笔记第2天 Golang (01)
练习题:example01对于给定的一个数字n,写出两两相加和等于n的组合。main.gopackage mainimport ( "fmt")func list(n int) { for i :=0;i<=n;i++ { fmt.Printf("%d + %d = %d \n",i,n-i,n) }}func main() { list(10...原创 2019-12-02 00:35:25 · 98 阅读 · 0 评论