摘要:
FD file descriptor 文件信息netFD 实现了各个系统对socket的封装conn该结构实现了Conn接口type conn struct { fd *netFD}conn的方法Read(b []byte) (n int, err error)从连接中读取所有内容 result, err := ioutil.ReadAll(conn) //读取所有内容 //读取指定长度的内容 var buf [512]byte n, err := conn.Read(buf[0:]) //不断的从连接读取.. result := bytes.NewBuffer... 阅读全文
摘要:
ip.go 中定义了三个类型.分别是.IP,IPMask,IPNetIP类型IP类型被定义为一个字节数组。 ParseIP(String) 可以将字符窜转换为一个IP类型. name := "127.0.0.1" addr := net.ParseIP(name) fmt.Println(addr.IsLoopback())常用方法Equal(x IP) bool比较两个IP地址是否相等DefaultMask() IPMask一个IP返回默认的掩码.返回的类型是IPMaskMask(mask IPMask) IP使用一个掩码可以使用一个IP地址的方法,找到该IP地址的网络 阅读全文
摘要:
基本类型先看几个简单的例子:变量 i 的类型是 int,在内存中使用一个有符号32位单元表示(所有的图片显示了32位的内存布局;在当前的实现中,只有指针类型在64位机器上有扩展——int 仍然是32位——尽管一个实现可以选择使用64位。)变量 j 的类型是 int32,因为有明确的类型转换。即使 i 和 j 有着相同的类型结构,他们的类型是不同的;赋值 i = j 会产生类型错误,因此必须写成显式的类型转换:i = int(j)。变量 f 的类型是 float,在当前的实现中代表这一个32位的浮点值。它和 int32 有着相同的内存封装,但内部布局不同。结构和指针现在开始加快速度了。变量 by 阅读全文
摘要:
timer 计时器用于在指定的Duration类型时间后调用函数或计算表达式。如果只是想指定时间之后执行,使用time.Sleep()使用NewTimer(),可以返回的Timer类型在计时器到期之前,取消该计时器直到使用<-timer.C发送一个值,该计时器才会过期timer1 := time.NewTimer(time.Second * 2)ticker 断续器按照指定的周期来调用函数或计算表达式。通常会使用go新开一个线程,否则会使用时间控制停止ticker ticker := time.NewTicker(time.Millisecond * 500) go func() { . 阅读全文
摘要:
先看看有哪些类型Time时间类型,包含了秒和纳秒以及LocationMonthtype Month int 月份.定义了十二个月的常量Weekdaytype Weekday int 周,定义了一周的七天Durationtype Duration int64 持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候.可以直接传入time.Secondconst ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Micr... 阅读全文
摘要:
value.go中的函数func Append(s Value, x ...Value) Valuefunc AppendSlice(s, t Value) Valuefunc Indirect(v Value) Valuefunc MakeChan(typ Type, buffer int) Valuefunc MakeFunc(typ Type, fn func(args []Value) (results []Value)) Valuefunc MakeMap(typ Type) Valuefunc MakeSlice(typ Type, len, cap int) Valuefunc 阅读全文
摘要:
切片是引用类型,即如果赋值切片给另一个切片,它们都指向同一底层数组。例如,如果某函数取切片参量,对其元素的改动会显现在调用者中,类似于传递一个底层数组的指针。因此 Read 函数可以接受切片参量,而不需指针和计数;切片的长度决定了可读数据的上限。这里是 os 包的 File 型的 Read 方法的签名: func (file *File) Read(buf []byte) (n int, err os.Error)此方法返回读入字节数和可能的错误值。要读入一个大的缓冲 b 的首32字节, 切片(动词)缓冲。 n, err := f.Read(buf[0:32])这种切片常用且高效。... 阅读全文
摘要:
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000... 阅读全文
摘要:
反射包主要有一个接口:type,和一个结构value;type接口commonType类型实现了type接口,下面是type中的各类型关系commonType>unCommonType>methodarrayType|chanType|funcType|interfaceType|mapType|ptrType|sliceType >commonTypeptrMap>n*commonType其他结构Method结构MethodByName()和Method()会返回这种类型type Method struct { Name string PkgPath string T 阅读全文
摘要:
反射的规则在运行时反射是程序检查其所拥有的结构,尤其是类型的一种能力;这是元编程的一种形式。它同时也是造成混淆的重要来源。在这篇文章中将试图明确解释在 Go 中的反射是如何工作的。每个语言的反射模型都不同(同时许多语言根本不支持反射)。不过这篇文章是关于 Go 的,因此接下来的内容“反射”这一词表示“在 Go 中的反射”。类型和接口由于反射构建于类型系统之上,就从复习一下 Go 中的类型开始吧。Go 是静态类型的。每一个变量有一个静态的类型,也就是说,有一个已知类型并且在编译时就确定下来了:int,float32,*MyType,[]byte 等等。如果定义type MyInt intvar 阅读全文