go语言网络编程需要导入包net如下 import( "fmt" "net" ) 重要函数 funcListen(net,laddrstring)(Listener,error) funcAccept()(cConn,errerror) funcRead(b[]byte)(nint,errerror) 好,我们先写一个go服务器端。 编程之前,先来了解下go语法,熟悉的跳过此段。 go的变量声明比较怪,和c的声明“相反” c语言的声明是这样的inta; go语言的声明是这样的varaint;如果无视var这个标志,你会就是“相反”。 而且你声明不使用会报错,在go中。 go语言的多变量赋值,i:=1等价于刚才说明的variint=1,下面的i,j赋值会自动匹配i=1,j=1 i,j:=1,1 i=i+j 恩,这个多变量赋值的这个东西,在函数返回值有多变量的用上。对,go语言函数可以返回多个值⊙﹏⊙ 和lua语言相似。 go语言的函数实现如下所示,函数形参的声明不用带上var functest(rstring,errstring){ returnrerr } i,j:=test("1","2"); go语言的for和if if和for一样,可以在条件之前执行一个简单的语句,用分号相隔,由这个语句定义的变量的作用域仅在if范围之内。 如下所示 ify:=5;y==5{//如果y=5则输出y fmt.Println(y) } go语言defer的使用,代码例子如下 file.Open("C:/test.txt")deferfile.Close()作用:在函数退出时调用,这样就有效避免了C语言中的内存泄露问题. 下面大家可以看看超级简单的tcp服务器端的代码 packagemainimport("net""fmt")funcmain(){ server,err:=net.Listen("tcp",":") iferr==nil{//若果err为nil,则成功创建 for{ con,error_:=server.Accept() fmt.Println("有一个客户连接\n") iferror_==nil{ con.Write([]byte("helloworld!")) } } }else{ return } } 下面则是客户端的代码 conn,err:=net.Dial("tcp",".0.0.1:") iferr==nil{ for{ buf:=make([]byte,) iflength,err:=conn.Read(buf);err==nil{ iflength0{ buf[length]=0 fmt.Printf("%s",string(buf[0:length])) } } } }else{ return } 整合在一起就是以下代码 ifos.Args[1]=="server"{ server,err:=net.Listen("tcp",":") iferr==nil{//若果err为nil,则成功创建 for{ con,error_:=server.Accept() fmt.Println("有一个客户连接\n") iferror_==nil{ con.Write([]byte("helloworld!")) } } }else{ return } }else{ conn,err:=net.Dial("tcp",".0.0.1:") iferr==nil{ for{ buf:=make([]byte,) iflength,err:=conn.Read(buf);err==nil{ iflength0{ buf[length]=0 fmt.Printf("%s",string(buf[0:length])) } } } }else{ return } }北京治疗白癜风的费用要多少钱早期白癜风能治愈否
|