时间:2016-12-21来源:本站原创作者:佚名

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

}

}







































北京治疗白癜风的费用要多少钱
早期白癜风能治愈否

转载请注明原文网址:http://www.gzdatangtv.com/bcyyys/5071.html

------分隔线----------------------------