随笔分类 -  GOLANG

摘要:Lookup所有相关的函数全在net包下的doc.go中LookupHost(host string) (addrs []string, err error)对某个主机名执行DNS查询,返回主机名,注意返回的是字符窜slice.可能有多个IP地址 addr, _ := net.LookupHost("www.baidu.com") fmt.Println(addr) // [220.181.112.143 220.181.111.148] LookupIP(host string) (addrs []IP, err error)同上,不过返回的是IP类型的sliceLook 阅读全文
posted @ 2013-04-18 15:03 zhepama 阅读(1097) 评论(0) 推荐(0) 编辑
摘要:今为止我们已经区分TCP和UDP API的不同,使用例子DialTCP和DialUDP分别返回一个TCPConn和 UDPConn。Conn类型是一个接口,TCPConn和UDPConn实现了该接口。在很大程度上,你可以通过该接口处理而不是用这两种类型。Dial(network, address string) (Conn, error)net可以是"tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only), "udp", "udp4" (IPv4-only), 阅读全文
posted @ 2013-04-18 15:02 zhepama 阅读(7025) 评论(0) 推荐(0) 编辑
摘要:TCP和UDP并不是建立在IP层之上唯一的协议。该网站:http://www.iana.org/assignments/protocol-numbers 列表上大约有140关于它们(该列表往往在Unix系统的/etc/protocols文件上。)。TCP和UDP在这个名单上分别为6和17。Go允许你建立所谓的原始套接字,使您可以使用这些其它协议通信,或甚至建立你自己的。但它提供了最低限度的支持: 它会连接主机, 写入和读取和主机之间的数据包。在接下来的章节中,我们将着眼于设计和实现自己的基于TCP之上的协议; 这部分认为同样的问题存在于IP层。为了简单起见,我们将使用几乎最简单的例子: 如何发 阅读全文
posted @ 2013-04-18 15:01 zhepama 阅读(933) 评论(1) 推荐(0) 编辑
摘要:处理TCP和UDP之间的主要区别是如何处理多个客户端可能同时有数据包到达,没有一个管理TCP会话的缓冲。主要需要调用的是func ResolveUDPAddr(net, addr string) (*UDPAddr, os.Error)func DialUDP(net string, laddr, raddr *UDPAddr) (c *UDPConn, err os.Error)func ListenUDP(net string, laddr *UDPAddr) (c *UDPConn, err os.Error)func (c *UDPConn) ReadFromUDP(b []byte) 阅读全文
posted @ 2013-04-18 15:00 zhepama 阅读(1632) 评论(0) 推荐(0) 编辑
摘要: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... 阅读全文
posted @ 2013-04-18 14:59 zhepama 阅读(4976) 评论(0) 推荐(0) 编辑
摘要: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地址的网络 阅读全文
posted @ 2013-04-16 18:58 zhepama 阅读(3419) 评论(0) 推荐(0) 编辑
摘要: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() { . 阅读全文
posted @ 2013-04-16 16:44 zhepama 阅读(1572) 评论(0) 推荐(0) 编辑
摘要:先看看有哪些类型Time时间类型,包含了秒和纳秒以及LocationMonthtype Month int 月份.定义了十二个月的常量Weekdaytype Weekday int 周,定义了一周的七天Durationtype Duration int64 持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候.可以直接传入time.Secondconst ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Micr... 阅读全文
posted @ 2013-04-12 19:37 zhepama 阅读(51428) 评论(1) 推荐(0) 编辑
摘要: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 阅读全文
posted @ 2013-04-12 19:05 zhepama 阅读(3780) 评论(0) 推荐(0) 编辑
摘要:切片是引用类型,即如果赋值切片给另一个切片,它们都指向同一底层数组。例如,如果某函数取切片参量,对其元素的改动会显现在调用者中,类似于传递一个底层数组的指针。因此 Read 函数可以接受切片参量,而不需指针和计数;切片的长度决定了可读数据的上限。这里是 os 包的 File 型的 Read 方法的签名: func (file *File) Read(buf []byte) (n int, err os.Error)此方法返回读入字节数和可能的错误值。要读入一个大的缓冲 b 的首32字节, 切片(动词)缓冲。 n, err := f.Read(buf[0:32])这种切片常用且高效。... 阅读全文
posted @ 2013-04-11 01:29 zhepama 阅读(442) 评论(0) 推荐(0) 编辑
摘要:反射包主要有一个接口: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 阅读全文
posted @ 2013-04-08 17:57 zhepama 阅读(3512) 评论(0) 推荐(0) 编辑
摘要:限定标识符限定标识符为使用包名前缀限定的标识符。包名与标识符均不能为空白的。限定标识符用于访问另一个包中的标识符,它必须被导入。 标识符必须是已导出且在该包的包块中声明。 math.Sin // 表示math包中的Sin函数函数字面函数字面可赋予一个变量或直接调用。f := func(x, y int) int { return x + y }func(ch chan int) { ch <- ACK }(replyChan)闭包 的函数字面:它们可引用定义在外围函数中的变量。 那些变量共享于外围函数与函数字面之间,并且只要它们可访问就会继续存在。选择器 .对于不为包名的主表达式 x,选 阅读全文
posted @ 2013-04-05 15:54 zhepama 阅读(459) 评论(0) 推荐(0) 编辑
摘要:类型布尔值,数值与字符串类型的实例的命名是预声明的。 数组,结构,指针,函数,接口,切片,映射和信道这些复合类型可由类型字面构造。每个类型 T 都有一个 基本类型:若 T 为预声明类型或类型字面, 其相应的基本类型为 T 本身。否则,T的基本类型为其 类型声明中所依据类型的基本类型。 type T1 string type T2 T1 type T3 []T1 type T4 T3以上 string,T1 和 T2 的基本类型为 string。 []T1,T3 和 T4 的基本类型为 []T1 。类型与值注意下面说的是类型相同若两个数组类型其元素类型相同且长度相同,那么它们的... 阅读全文
posted @ 2013-04-05 01:01 zhepama 阅读(441) 评论(0) 推荐(0) 编辑
摘要:安装golangGOROOT 理论上只要定义这一个环境变量就可以玩了,go编译的时候会首先在安装目录下寻找包GOBIN 如果不定义的话,默认是$GOROOT/bin 如果想不切换目录执行go的命令的话.需要将$GOBIN 加入到PATH目录中.这个你懂的GOPATH 一般是你的开发目录,可以有多个.多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下$GOPATH 目录约定有三个子目录:src 存放源代码(比如:.go .c .h .s等)pkg 编译后生成的文件(比如:.a)bin 编译后生成的可执行文件(为了方便... 阅读全文
posted @ 2013-04-04 22:52 zhepama 阅读(3262) 评论(0) 推荐(0) 编辑
摘要:块块 为一对大括号括住的声明和语句。块 = "{" { 语句 ";" } "}" .除显式源码块外,还有隐式块: 全域块 包含所有的Go源码文本。 每个包都有包含其所有Go源码文本的 包块。 每个文件都有包含其所有Go源码文本的 文件块。 每个 if、for 和switch 语句都被视为处于其自身的隐式块中。 每个 switch 或 select 语句中的子句其行为如同隐式块。块可嵌套并会影响作用域。标识符标识符被用来命名程序实体,例如变量和类型。一个标识符由一个或多个字母和数字组成。 标识符的第一个字符必须是字母。给定一个标识符集, 阅读全文
posted @ 2013-04-04 19:02 zhepama 阅读(1282) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示