Go语言
super_lixiang
这个作者很懒,什么都没留下…
展开
-
GO- 面向对象4-接口与实现
@接口与实现接口定义了一组共性 这些共性体现为接口的抽象方法 抽象方法就是只有方法定义,没有方法实现的方法 接口里有且只有抽象方法 接口可以有多种不同的具体子类实现 接口的作用是为子类实现提供统一的API定义接口//定义【USB设备】接口//接口:只包含抽象方法type USBDevice interface { /*定义了三个【抽象方法】:定义而不做实现*/...转载 2018-09-12 14:04:17 · 134 阅读 · 0 评论 -
GO-JSON读写1-JSON序列化
概述 序列化:将Go数据转化为json字符串定义结构体type Person struct { Name string Age int Sex bool Hobbies []string}定义数据var ( zhangqd, mutz Person ps []Person m...转载 2018-09-13 08:25:00 · 160 阅读 · 0 评论 -
GO-JSON读写2-JSON反序列化
导入依赖import ( "encoding/json" "fmt")定义结构体type Human struct { Name string Age int Sex bool Hobbies []string}定义数据var jsonStr,jsonStr2 stringvar zqd Huma...转载 2018-09-13 08:29:46 · 261 阅读 · 0 评论 -
GO-JSON读写3-读写JSON文件
概述本地文件是存储JSOP数据的一个重要方案 将Go数据以JSON字符串的形式写出到文件中的过程称之为编码 从文件中读取JSON字符串为Go数据的过程称之为解码导入依赖import ( "encoding/json" "os" "fmt")定义结构体type PersonII struct { Name string Age...转载 2018-09-13 08:31:42 · 3828 阅读 · 0 评论 -
GO-程序运算
程序运算1:数学运算加减乘除求余都是很简单的数学计算,直接上代码package mainimport "fmt"func main() { demo61()}func demo61() { var ret float32 //ret = getResult(5, 3, "+") //fmt.Println("ret=", ret) ...原创 2018-09-13 15:51:03 · 536 阅读 · 0 评论 -
GO-流程控制
流程控制1:选择结构if-else if-else结构 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。func getResult(a float32, b float32, operator string) (ret float32) { /* 单分支 if o...原创 2018-09-13 15:54:18 · 178 阅读 · 0 评论 -
GO-异常处理
异常处理1:恐慌与处理恐慌概述代码在运行时如果出现异常,系统会报出恐慌(panic)并终止运行 IDE和终端打印的恐慌日志,包含了恐慌的信息以及报恐慌所在的代码行 恐慌好比一种震撼的暴力教育,其目的在于警示开发者,什么是可以的而什么又是不可以的 代码在交付使用前要经过充分测试,处理一切可能的恐慌系统报恐慌 本例中由于我们错误地使用了一个超出数组长度的下标,导致系统报出恐慌f...原创 2018-09-13 15:57:00 · 2124 阅读 · 0 评论 -
GO-语言介绍
@历史掌故开源的编程语言 简单、可靠、高效 2007年开始研发,2009年11月开源,2012年初发布第一个稳定版本 拥有一个活跃的社区@作者Rob Pike 曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。 Robert Griesemer 曾协助制作Java的H...原创 2018-09-14 08:35:32 · 223 阅读 · 0 评论 -
GO-反射简介
反射概述通常的程序逻辑是:编码时先写好剧本,运行时按照写好的剧本演 何时创建一个什么实例,给哪个属性赋什么值,然后调用它的哪个方法都毫厘不差 但能否在运行时动态地生成“剧本”呢? 根据具体的业务需要见机行事,动态地生成一个不知道具体类型会是什么的实例,动态地访问一个无法提前预知的属性或方法 答案是可以的,这便引出了今天的主角——反射应用场景举例:导出商品列表到Excel需求是:不...原创 2018-09-14 09:05:41 · 835 阅读 · 0 评论 -
GO-SDK标准库1:strings
概述strings库定义了对字符串的常用处理操作 常用的包括:检索子串、格式化、比较大小、裁剪、拼接、炸碎等func main() { //判断是否包含子串 fmt.Println(strings.Contains("Hello", "shit")) //false fmt.Println(strings.Contains("Hello", "lo...转载 2018-09-11 08:30:14 · 218 阅读 · 0 评论 -
GO-SDK标准库2:math
package mainimport ( "math/big" "fmt")func main() { //创建大数(值可以突破int64) bigInt1 := big.NewInt(123) bigInt2 := new(big.Int) bigInt2.SetString("3141592653589793238462643383...转载 2018-09-11 08:31:12 · 204 阅读 · 0 评论 -
GO-SDK标准库3:os
概述os包封装了操作系统提供给Go的API 常用的包括:读取系统信息、读取环境变量、读取和修改文件信息等package mainimport ("os""fmt""time")func main() { //获得当前工作路径 //D:\BJBlockChain1801\demos\ dir, _ := os.Getwd() fmt.Pri...转载 2018-09-11 08:32:21 · 214 阅读 · 0 评论 -
GO-面向对象1-封装
面向对象概述在没有面向对象的年代,编程的方式是面向过程的 面向过程的编程,管理的是一个一个的函数,撸工程就是堆砌大量的函数 面向对象中类的概念,Go语言是通过结构体来实现的 类/结构体是对函数的进一步封装,即把有机关联的变量和函数封装为一个结构体 有了类/结构体的概念以后,撸工程就由管理大量的函数变为了管理少量的类 书本理论中面向函数的三大特性是:封装、继承、多态(有时会再加一个抽象...转载 2018-09-11 08:34:33 · 95 阅读 · 0 评论 -
GO-面向对象3-多态
多态概述多态是指,一个父类接口可以拥有多种子类实现形态 这些子类形态之间有相同点,那就是它们都实现了父类接口中的方法 不同点则是大家对父类接口方法的实现方式各不相同,演绎何为千姿百态 例如,定义一个父类接口战士,凡战士者势必能攻能守,所以定义两个抽象方法:进攻与防守,但不做具体实现 骑兵、步兵、法师都能杀敌护国,他们是战士接口的三个子类实现 所以他们的共性是:都有进攻方法与防守方法...转载 2018-09-11 08:51:34 · 121 阅读 · 0 评论 -
GO-网络通信
网络通信1:UDPUDP协议1.简介UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,...原创 2018-09-18 08:49:43 · 1307 阅读 · 0 评论 -
共识算法-LevelDB
LevleDB 是什么 leveldb 是 google 两位工程师使用 C++实现的单机版 k-v 存储系统 key 和 value 都是任意的字节数组,支持内存和持久化存储 数据都是按照 key 排序,用户可以重写排序函数 包含基本的数据操作接口,Put(key,value),Get(key),Delete(key) 多操作可以当成一次原子操作 LevleDB 的局限性 ...原创 2018-09-18 08:41:59 · 298 阅读 · 0 评论 -
GO-面向对象5-接口的类型断言
类型断言概述还记得大明湖畔的多态吗?——一个父类接口可以有很多不同的子类形态,骑兵步兵都是战士 当我从一个战士的集合中随意抽取一员时,它事实上是骑兵还是步兵呢 我们需要使用类型断言来加以判断——类型断言就是类型判断(翻译Go的砖家可能语死早) 类型断言的具体方式有二类型断言方法一 在Go语言中,我们可以使用type switch语句查询接口变量的真实数据类型,语法如下:swit...转载 2018-09-12 14:05:32 · 258 阅读 · 0 评论 -
GO-面向对象5-接口的继承
定义两个父类接口//定义动物接口:所有动物都会新陈代谢,都会挂掉type Animal interface { //新陈代谢:吃进来+排出去,shit就是翔啊~ Eat(food string) (shit string) //GAME OVER Die()}//定义战士接口,会进攻和防守type Fighter interface { //...转载 2018-09-12 14:08:18 · 166 阅读 · 0 评论 -
GO- 文件操作1-文件读写的一般操作
导入依赖import ( "os" "fmt" "time" "bufio" "io" "io/ioutil")打开和关闭文件func main41() { //打开文件 filePtr, err := os.Open("d:/小黑子.avi") if err != nil {转载 2018-09-12 14:11:03 · 317 阅读 · 0 评论 -
GO- 文件操作2-实战案例
导入依赖import ( "fmt" "io" "os" "io/ioutil")文件拷贝1func copyFile(srcFilename string,dstFilename string) { bytes, _ := ioutil.ReadFile(srcFilename) err := ioutil.WriteFile(d...转载 2018-09-12 14:12:16 · 160 阅读 · 0 评论 -
GO-图形用户界面
图形用户界面1:初识WalkGo与GUI——GO语言的图形界面WalkGO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。关于Walk界面库(官方介绍):Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。...原创 2018-09-17 08:29:56 · 10262 阅读 · 0 评论 -
GO-复合类型1-数组
数组概述数组是长度固定,类型固定的数据容器 根据下标访问和修改元素内容 下标从0开始,最后一个元素的下标是长度减一 可以使用len(arr)获得数组的长度创建数组func demo71() { //开辟10长度的整型数组 var a1 [10]int //[0 0 0 0 0 0 0 0 0 0] fmt.Println(a1) //开辟...转载 2018-09-07 14:25:44 · 190 阅读 · 0 评论 -
GO-复合类型2-切片
切片概述切片可以理解为长度可以动态变化的数组 切片和数组的相同点1:通过下标来访问元素 切片和数组的相同点2:通过下标或range方式遍历元素 不同点是切片的长度不是固定的,你可以动态地向切片中追加新的元素 切片中可以容纳的元素个数成为容量,容量>=长度 你可以通过len(slice)和cap(slice)分别获取切片的长度和容量 通过make(type,len,cap)的方...转载 2018-09-07 14:29:07 · 210 阅读 · 0 评论 -
GO-复合类型3-映射
映射概述映射(map)是键值对形成的集合 键值的类型都是任意的 可以根据键快速的查询值,而无须遍历创建map可以通过声明map[keytype]valuetype的方式创建map 也可以通过make(map[keytype]valuetype,size)的方式来创建,size不指定时默认长度为0 以map[key]和map[key]=value的方式可以访问和修改键值func...转载 2018-09-07 14:32:51 · 146 阅读 · 0 评论 -
GO-复合类型4-指针
指针概述指针就是地址,指针变量的值就是内存中的一块地址编号 所有普通类型都有对应的指针类型:int,*float64,*bool,*book,[10]int,*map[string]interface{} 对指针变量的打印推荐使用%p占位符,代表以地址的形式打印 对普通变量取地址: agePtr := &age 取地址中的值:age := *agePtr对普通变量取地址 VS...转载 2018-09-07 14:34:03 · 147 阅读 · 0 评论 -
GO-复合类型5-结构体
定义结构体type book struct { //书名属性 name string //价格属性 price float64}创建对象时直接对属性赋值func demo91() { b := book{"水许传",34.56} fmt.Printf("type=%T,value=%#v\n",b,b)}创建空白对象,并逐一...转载 2018-09-07 14:37:30 · 174 阅读 · 0 评论 -
GO-函数1-参数和返回值
函数概述函数是对一段能够重复使用的代码的封装 函数的参数定义了外界给函数输入的数据 函数的返回值定义了函数给外界输出的数据 Go语言函数支持不定长参数和多个返回值@函数定义和调用//定义函数func sayHello() { fmt.Println("fuck off!")}//调用函数sayHello()@函数参数 无参函数func add0()...转载 2018-09-07 14:41:53 · 882 阅读 · 0 评论 -
GO-函数2-匿名函数
匿名函数概述匿名函数的主要作用是封装一段一次性执行的代码 它无所谓复用,所以无需起名,之所以进行封装的意义,在于使一段代码成为一个整体 defer延时执行一段代码,和go并发执行一段代码是匿名函数的常用场景//匿名函数func main() { //延时执行的匿名函数 defer func() { fmt.Println("劳资延时·无名,劳资最后...转载 2018-09-07 14:43:40 · 395 阅读 · 0 评论 -
GO-函数3-闭包函数
闭包函数概述 闭包函数:返回函数的函数 闭包的好处:【内层函数的状态】被保存在闭包中 不使用闭包,就要开辟多个全局变量来保存函数以外的数据 如果说这个函数被多方调用,大家都需要各保存各的数据,那么此时就需要开辟多个全局变量 具体使用哪个全局变量,还要在函数内做判断——增大了重复的代码量,令代码看起来比较垃圾使用多个全局变量保存多套副本的索引//全局变量var heros = ...转载 2018-09-07 14:44:29 · 122 阅读 · 0 评论 -
GO-并发技术
并发技术1:CSP并发理论异步async 并行:多个任务并发执行同步sync 串行:多个任务依次执行阻塞block 某个并发任务由于拿不到资源没法干活,从而无所事事地干等异步回调async callback A线程唤起B线程,令其干活 同时给B一个回调函数 命令B在干完活以后,执行这个回调函数 这个回调函数会与A线程发生交互 A不必阻塞等待B执行的结果,AB两个线程...原创 2018-09-14 20:25:42 · 832 阅读 · 0 评论