go语言网络编程之tcp

go语言网络编程之tcp

go语言网络编程需要导入包 net如下

import (
    "fmt"
    "net"
)
 

重要函数

func Listen(net, laddr string) (Listener, error)

func Accept() (c Conn, err error)
func Read(b []byte) (n int, err error)

好,我们先写一个go服务器端。

编程之前,先来了解下go语法,熟悉的跳过此段。

go的变量声明比较怪,和c的声明“相反” 

c语言的声明是这样的  int a;

go语言的声明是这样的 var a int;  如果无视var这个标志,你会就是“相反”。

而且你声明不使用会报错,在go中。


go语言的多变量赋值, i:=1  等价于刚才说明的  var i int  = 1,下面的i,j赋值会自动匹配 i=1,j=1

    i, j := 1, 1 
    i = i + j

恩,这个多变量赋值的这个东西,在函数返回值有多变量的用上。对,go语言函数可以返回多个值⊙﹏⊙

和lua语言相似。

go语言的函数实现如下所示,函数形参的声明不用带上var

func test(string, err string){

return r err

i,j:=test("1","2");


go语言的for和if

if和for 一样,可以在条件之前执行一个简单的语句,用分号相隔,由这个语句定义的变量的作用域仅在 if 范围之内。

如下所示

if y:=5;y==5 {//如果y=5则输出y

fmt.Println(y)

}

go语言defer的使用,代码例子如下

  file.Open("C:/test.txt")
defer file.Close()
作用:在函数退出时调用,这样就有效避免了C语言中的内存泄露问题.


下面大家可以看看超级简单的tcp服务器端的代码

package main
import (
    "net"
    "fmt"
)
func main() {

  
        server, err := net.Listen("tcp", ":7777")
        if err == nil { //若果err为nil,则成功创建
            for {
                con, error_ := server.Accept()
                fmt.Println("有一个客户连接\n")
                if error_ == nil {
                    con.Write([]byte("hello world!"))
                }
            }
        } else {
            return
        }
 
} 

下面则是客户端的代码

    conn, err := net.Dial("tcp", "127.0.0.1:7777")
        if err == nil {
            for {
                buf := make([]byte, 1024)
                if length, err := conn.Read(buf); err == nil {
                    if length > 0 {
                        buf[length] = 0
                        fmt.Printf("%s", string(buf[0:length]))
                    }
                }
            }
        } else {
            return
        }

整合在一起就是以下代码

    if os.Args[1] == "server" {
        server, err := net.Listen("tcp", ":7777")
        if err == nil { //若果err为nil,则成功创建
            for {
                con, error_ := server.Accept()
                fmt.Println("有一个客户连接\n")
                if error_ == nil {
                    con.Write([]byte("hello world!"))
                }
            }
        } else {
            return
        }
    } else {
        conn, err := net.Dial("tcp", "127.0.0.1:7777")
        if err == nil {
            for {
                buf := make([]byte, 1024)
                if length, err := conn.Read(buf); err == nil {
                    if length > 0 {
                        buf[length] = 0
                        fmt.Printf("%s", string(buf[0:length]))
                    }
                }
            }
        } else {
            return
        }
    }















相关推荐
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰(刘运强)老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能的MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页