摘要:package mainimport ( "archive/zip" "fmt" "io/ioutil" "os")func main(){ zipFile,err := zip.OpenReader("test.zip") if err != nil{ panic(err) } for _,val
阅读全文
摘要:这个函数是http里最重要的一个函数,或者说是服务端代码整合的最终灵魂。httpListenAndServe(port string, handler Handler)第一个参数是监听的端口、第二个参数是根页面的处理函数,可以为空。 接下来是它做了些什么。首先看源码吧还是func ListenAnd
阅读全文
摘要:通道:用来发送类型化数据的管道(负责协程之间的通信)FIFO通道。 声明:var identifier chan datatype为初始化的通道的值是nil所有的类型都可以用于通道、空接口。通道时引用类型。所以也使用make()函数类给它分配内存。 var ch1 chan stringch1 =
阅读全文
摘要:tcp服务器:Go会为每一个客户端产生一个协程用来处理请求Server端代码:func main(){ fmt.Println("Starting the server ...") listener,_ := net.Listen("tcp","localhost:50000")//使用tcp协议监
阅读全文
摘要:进程:计算机进行资源分配调度的基本单位。且运行在自己内存空间内的独立执行体(一个应用程序就是运行在机器上的一个进程)线程:进程内部共享进程内存资源的多个执行体(当一个线程进行IO时,换另一个线程执行) 并行:同一个程序在某个时间点同时运行在多个处理器核心上。并发:同一时间段内,多个线程执行任务(提高
阅读全文
摘要:单元测试:测试程序在各种数据下的准确性 基准测试(压力测试):测试程序的速度及弹性 testing包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能 测试文件必须满足 *_test.go这种格式*代表源文件的名字(测试代码和业务代码分开了) _test程序不会被普通的Go编
阅读全文
摘要:错误处理:当程序处于错误状态可以用os.Exit(1)来中止运行自定义错误:err := errors.New("I am error")用fmt创建错误(和print一个样,它会创建一个自定义error,字符串就是格式化后的字符串)fmt.Errorf("math: square root of
阅读全文
摘要:序列化pa := &Address{"家","太原","中国"}wa := &Address{"工作","昆山","江苏"}vc := &VCard{"王","剑英",[]*Address{pa,wa},"啊哈哈"}js,_ := json.Marshal(vc)//编码生成js([]byte),在
阅读全文
摘要:类型断言检测使用多态时指向对象的引用类型是否能变为更加具体的引用类型AB接口内嵌入的A和B两个接口number结构体实现了AB接口。A num = new (number)numab,err := num.(AB)//类型断言,判断A接口引用类型是否可以变为AB(更具体的引用类型)类型断言事不能转为
阅读全文
摘要:读取用户输入fmt.Scanln(&num,&str)//从控制台读取用户输入scanf,第一个参数是一个读取格式。input := "12 , 1 , 21"format := "%d , %s , %d" var name stringvar sex intvar age intfmt.Ssca
阅读全文
摘要:接口定义了一组方法,但是都没实现type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ...}实现了这些方法也就实现了这个接口 接口类型的变量就是一个接口值,指向实现了此接口的对象
阅读全文
摘要:Go通过类型别名和结构体的形式支持用户自定义类型。结构体是复合类型。通过new来创建 组成结构体类型的数据称为字段。type identifier struct { field1 type1 field2 type2 ...} 在结构体的指针和结构体引用中,调用结构体内的字段都使用选择器(.)就是这
阅读全文
摘要:GC算法使用的是可达性算法。通过runtime.GC()来显式调用GC()//一般别用 如果需要一个对象在被内存移除前执行一些特殊操作,使用SetFinalizerruntime.SetFinalizer(obj,func(obj *typeObj)) func可以是一个匿名函数
阅读全文
摘要:键值(KV)存储结构 声明var map1 map[keyType]valueTypemap是动态增长的。未初始化的map的值是nil 初始化map1 = make(map[keytype]valuetype)map1 = make(map[keytype]valuetype,cap)noteFre
阅读全文
摘要:实际上就是个数组。底层是一个数组,切片内有这个数组引用,和切片的信息。var arrAge = [5]int{18, 20, 15, 22, 16}var arrLazy = [...]int{5, 6, 7, 8, 22}//...可以忽略var arrKeyValue = [5]string{3
阅读全文
摘要:Go里面有三种类型的函数普通带有名字的函数匿名函数或者lambda函数方法 main()、init()函数没有参数和返回值。参数、返回值被统称为函数签名。大括号必须这样func g() {}函数重载在Go内不被允许。如果需要声明一个在外部被定义的函数,只需要给出函数名和函数签名,不需要给出函数体。
阅读全文
摘要:字符串是UTF-8字符的一个序列。字符串是字节的定长数组。解释字符串,包含转义字符,非解释字符串,不包含转义字符。字符串可以使用比较运算符进行比较,且按照内存中的字节来对比。获取字符串所占的字节长度:len(str)获取字符串中的字节地址是非法的。&str[i] 字符串拼接:s = s1 + s2
阅读全文
摘要:uint8.........................float32、float64(32精确到小数点后7位,64到15位)int是计算最快的一种类型尽可能使用float64,因为math包复数:complex64(32位实数和虚数)complex128(64位实数和虚数)位运算:二元:与&
阅读全文
摘要:var a intvar(a intb boolstr string)变量声明之后,系统自动赋值(零值)int 0 float 0.0 bool false string ""Go的编译器可以自动推断类型(编译时期、运行时期都可以)var i = 5i := 15当你想要使用固定类型的时候还是自己写
阅读全文
摘要:const Pi = 3.141显示类型定义:const b string = “string”隐式类型定义:const b = “string” 没有指定类型的常量被使用时,会根据使用环境来推断其类型。var n intf(n + 5)//5就是那个没有指定类型的常量常量的值必须是在编译时期就能确
阅读全文