行业知识
【Go语言快速上手(六)】管道, 网络编程,反射,用法讲解
博主CSDN主页:杭电码农-NEO
⏩专栏分类:Go语言专栏⏪
代码仓库:NEO的学习日记
关注我带你学习更多Go语言知识
GO快速上手
- 1. 前言
- 2. 初识管道
- 3. 管道的高级用法
- 4. GO中的网络编程
- 5. GO语言中的反射
- 6. 总结以及拓展
1. 前言
本篇文章是GO语言快速上手系列的最后一篇文章, 学完本章后你就掌握了GO语言常用的所有知识和语法, 在未来使用GO语言时你可能还会遇见一些奇怪的语法,但是别害怕, GO就是为了简洁而生,你有Java或CPP的基础,学什么都很快的
本章重点:
本篇文章着重讲解GO中的管道的概念以及用法. 还会讲解GO语言是怎样实现网络编程的, 会通过一个例子来讲解. 最后会讲解GO语言的反射机制,以及反射的语法.由于GO语言没有传统意义上的泛型编程概念,所以学习反射还是有必要的
2. 初识管道
说白了管道就是一个数据结构: 队列
管道的定义:
var 变量名 chan 管道类型var channel chan int管道可通过make进行初始化channel = make(chan int,3)//管道可以存放三个int类型变量
管道是有类型的,int类型管道只能写入int类型数据,并且管道是引用类型,必须初始化后,即make后才能使用它.除此之外,管道的用法比较奇特,通过左箭头fmt.Println("value: ",v)}intchan1 := make(chan int, 10)intchan2 := make(chan string, 10)intchan3 := make(chan float32, 10)go func() {//匿名函数time.Sleep(time.Second * 5)intchan1 time.Sleep(time.Second * 4)intchan2 time.Sleep(time.Second * 3)intchan3 case v1 := // 监听TCP端口 listener, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println(err) return } defer listener.Close() for { // 接受新的连接 conn, err := listener.Accept() if err != nil { fmt.Println(err) continue } //到来连接时,让协程去执行读写操作 go handleRequest(conn) // 使用goroutine处理连接 } } func handleRequest(conn net.Conn) { defer conn.Close() // 读取数据 reader := bufio.NewReader(conn) message, err := reader.ReadString('\n') if err != nil { fmt.Println(err) return } fmt.Print("Message received: ", string(message)) // 发送数据 conn.Write([]byte("Message received!\n")) } // 连接到TCP服务器 conn, err := net.Dial("tcp", "127.0.0.1:8080") if err != nil { fmt.Println(err) return } defer conn.Close() // 发送数据 fmt.Fprintf(conn, "Hello, Server!\n") // 读取响应 reader := bufio.NewReader(conn) message, err := reader.ReadString('\n') if err != nil { fmt.Println(err) return } fmt.Print("Message from server: ", string(message)) }}){//1.调用typeof函数,返回reflect.Type类型数据reType := reflect.TypeOf(i)fmt.Println(reType)//2. 调用valueof函数,返回reflect.value类型数据reValue := reflect.ValueOf(i)fmt.Println(reValue)//注,revalue是valueof类型,不能直接进行运算//想要获取revalue的值要调用revalue.Int()方法}func main(){//对基本类型进行反射var num int = 100test(num)}}){//1.调用typeof函数,返回reflect.Type类型数据reType := reflect.TypeOf(i)fmt.Println(reType)//2. 调用valueof函数,返回reflect.value类型数据reValue := reflect.ValueOf(i)fmt.Println(reValue)fmt.Println(reType.kind())}type stu struct{Name stringAge int}func main(){//对结构体类型进行反射student := stu{Name : "张三"Age : 18}test(student)}
上一篇:3D工业相机及品牌集合
下一篇:301怎么解决?