跟着b站上刘丹冰Aceld大佬开始做go项目
- 创建server结构体,要有server的Ip和Port两个变量
type Server struct {
Ip string
Port int
}
- 创建一个server的接口
func NewServer(ip string, port int) *Server {
server := &Server{
Ip: ip,
Port: port,
}
return server
}
- 启用服务器接口
func (this *Server) Start() {
//sorket listen
listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", this.Ip, this.Port))
if err != nil {
fmt.Println("net.Listen err:", err)
return
}
//close listen socket
defer listener.Close()
for {
//accept
conn, err := listener.Accept()
if err != nil {
fmt.Println("listener accept err", err)
continue
}
//do handler
go this.Handler(conn)
}
}
- 当前连接要做的业务
func (this *Server) Handler(conn net.Conn) {
//当前连接的业务
fmt.Println("连接建立成功")
}
- main函数创建一个服务器进行测试
package main
func main() {
server := NewServer("127.0.0.1", 8888)
server.Start()
}
总结
- 结构体若希望被别的包能访问到,名字首字母要大写
- net.Listen()用于创建一个服务器,监听指定的网络协议和端口号。net.Listen(“tcp”, “:8080”)会创建一个TCP服务器,监听8080端口。net.Listen()函数返回一个Listener对象,它可以用于接受和关闭连接。
如果在端口号前加上ip地址,表示只监听该ip上的该端口号。如果不写则表示监听所有指定端口号 - 关闭 listener 最好在创建后就在后面
defer listener.Close()