随笔分类 -  golang

摘要:基本介绍: 网络编程有两种: 1)tcp socket编程,是网络编程的主流。之所以叫tcp socket编程,是因为底层是基于tcp/ip协议的 2)b/s结构的http编程,我们使用浏览器去访问服务器时,使用的就是http协议,而http底层依旧是用tcp socket实现的 tcp socke 阅读全文
posted @ 2020-02-25 23:17 顽强的allin 阅读(1593) 评论(0) 推荐(0)
摘要:反射基本介绍 1)反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind) 2)如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段,方法) 3)通过反射,可以修改变量的值,可以调用关联的方法 4)使用反射,需要 import ("reflect") 反射重要 阅读全文
posted @ 2020-02-16 00:17 顽强的allin 阅读(595) 评论(0) 推荐(1)
摘要:多线程程序在单核上运行,就是并发 多线程程序在多核上运行,就是并行 Go协程和Go主线程 Go主线程(线程):一个Go线程上,可以起多个协程 ,你可以这样理解,协程是轻量级的线程 Go协程的特点: 1)有独立的栈空间 2)共享程序堆空间 3) 调度由用户控制 4)协程是轻量级的线程3 gorouti 阅读全文
posted @ 2020-02-03 23:23 顽强的allin 阅读(374) 评论(0) 推荐(0)
摘要:基本介绍: Go语言中自带的一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。通过单元测试,可以解决以下问题: 1)确保每个函数都是可运行 阅读全文
posted @ 2020-02-02 20:38 顽强的allin 阅读(531) 评论(0) 推荐(0)
摘要:文件在程序中是以流的形式来操作的。 流:数据从数据源(文件)和程序(内存)之间经历的路径 输入流:数据从数据源(文件)到程序(内存)的路径 输出流:数据从程序(内存)到数据源(文件)的路径 读文件方式: 1.带缓冲区的方式,os.Open, file.Close, bufio.NewReader() 阅读全文
posted @ 2020-01-20 21:38 顽强的allin 阅读(562) 评论(0) 推荐(0)
摘要:抽象介绍: 在定义一个结构体的时候,实际上就是把一类事物的共有属性(字段)和行为(方法) 提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。 封装: 把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行操作。 1)将结构体、 阅读全文
posted @ 2019-12-25 00:24 顽强的allin 阅读(904) 评论(0) 推荐(0)
摘要:说明: golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题 如果包里面的结构体变量首字母小写,引入后,不能直接使用,可以工厂模式解决: ch1.go package ch1 type student struct { Name string Score float64 } func 阅读全文
posted @ 2019-12-23 21:48 顽强的allin 阅读(704) 评论(0) 推荐(0)
摘要:golang中的方法是作用在指定的数据类型上的(即:和指定 数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是在struct。 方法的使用: type Person struct { Num int } // 给A类型绑定一个方法 func (p Person) test() { fmt.Pr 阅读全文
posted @ 2019-12-17 00:30 顽强的allin 阅读(343) 评论(0) 推荐(0)
摘要:1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转 4. struct的每个字段上,可以写上一个tag,该tag可 阅读全文
posted @ 2019-12-15 23:47 顽强的allin 阅读(1054) 评论(0) 推荐(0)
摘要:defer语句中的函数会在return语句更新返回值变量后再执行,又因为在函数中定义的匿名函数可以访问该函数包括返回值变量在内的所有变量,所以,对匿名函数采用defer机制,可以使其观察函数的返回值。 以double函数为例: func double(x int) int { return x + 阅读全文
posted @ 2019-12-05 23:10 顽强的allin 阅读(1450) 评论(0) 推荐(0)
摘要:函数经常会返回多种错误,这对终端用户来说可能会很有趣,但对程序而言,这使得情况变得复杂。很多时候,程序必须根据错误类型,作出不同的响应。让我们考虑这样一个例子:从文件中读取n个字节。如果n等于文件的长度,读取过程的任何错误都表示失败。如果n小于文件的长度,调用者会重复的读取固定大小的数据直到文件结束 阅读全文
posted @ 2019-12-01 22:42 顽强的allin 阅读(16135) 评论(0) 推荐(1)
摘要:考虑一个二维的绘图程序,提供了一个各种图形的库,例如矩形、椭圆形、星形和轮形等几何形状。这里是其中两个的定义: type Circle struct { X, Y, Radius int } type Wheel struct { X, Y, Radius, Spokes int } 一个Circl 阅读全文
posted @ 2019-11-20 23:41 顽强的allin 阅读(1055) 评论(0) 推荐(0)
摘要:思路不太好理解,请用断点 package main import "fmt" type tree struct { value int left, right *tree } func Sort(values []int) { var root *tree for _, v := range val 阅读全文
posted @ 2019-11-20 22:45 顽强的allin 阅读(257) 评论(0) 推荐(0)
摘要:常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。 下面是来自time包的例子,它首先定义了一个Weekday命名类型,然后为 阅读全文
posted @ 2019-11-18 23:42 顽强的allin 阅读(306) 评论(0) 推荐(0)
摘要:package mainimport "fmt"import "os"type point struct { x, y int}func main() { // Go 为常规 Go 值的格式化设计提供了多种打印方式。例 // 如,这里打印了 `point` 结构体的一个实例。 p := point{ 阅读全文
posted @ 2019-11-18 23:26 顽强的allin 阅读(390) 评论(0) 推荐(0)
摘要:当使用fmt包打印一个数值时,我们可以用%d、%o或%x参数控制输出的进制格式,就像下面的例子: o := 0666 fmt.Printf("%d %[1]o %#[1]o\n", o) // "438 666 0666" x := int64(0xdeadbeef) fmt.Printf("%d 阅读全文
posted @ 2019-11-17 23:32 顽强的allin 阅读(1215) 评论(0) 推荐(0)
摘要:另一个创建变量的方法是调用用内建的new函数。表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T 。 p := new(int) // p, *int 类型, 指向匿名的 int 变量 fmt.Println(*p) // "0" *p = 阅读全文
posted @ 2019-11-14 23:50 顽强的allin 阅读(3712) 评论(0) 推荐(0)
摘要:1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。 2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class 阅读全文
posted @ 2019-11-14 10:23 顽强的allin 阅读(688) 评论(0) 推荐(1)
摘要:1.map的基本介绍 map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到的 2.map的声明 1)基本语法 var map 变量名 map[keytype] valuetype 注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和 阅读全文
posted @ 2019-11-11 23:22 顽强的allin 阅读(580) 评论(0) 推荐(0)
摘要:数组 数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。 数组的定义: var 数组名 [数组大小]数据类型 var a [5]int 赋初值 a[0] = 1 a[1] = 30 .... 数组在内存布局 总结: 1)数组的地址可以通过数组名来获取 &intArr 2)数 阅读全文
posted @ 2019-11-07 23:29 顽强的allin 阅读(336) 评论(0) 推荐(0)