go入门(8)

channel

有了通道之后,线程的数据会和main方法一起结束

package main

import "fmt"

func main() {

	//创建一个通道
	ch := make(chan int)
	//开启异步
	go func() {
		fmt.Println("操作之前")
		fmt.Println("操作之后")
		//像通道插入数据
		ch <- 100

	}()
	//获取通道的数据
	a := <-ch
	fmt.Println(a)
	fmt.Println("程序结束")

}

2个线程之间保证数据同步

package main

import "fmt"

func main() {

	//创建通道
	ch := make(chan int)

	//用于2个线程之间的同步操作
	tongbu := make(chan int)
	go func() {
		ch <- 111
		fmt.Println("插入成功")
		tongbu <- 222
	}()

	go func() {
		aa := <-ch
		fmt.Println("获取数据", aa)
		tongbu <- 333

	}()
	//获取2次数据 保证2个线程之间执行完毕
	<-tongbu
	<-tongbu
	fmt.Println("程序结束")
}

创建有缓存数量的通道

 当我们创建1个通道,但是插入2条数据,没有获取,那么会直接报错 死锁

package main

import "fmt"

func main() {

	//创建有缓存的通道
	ch := make(chan int, 1)
	//插入通道数据
	ch <- 111
	ch <- 222
	fmt.Println("程序结束")
}

当我们改成2个缓存数量的时候,就不会出现死锁了

select 

随机返回通道的值,如果没有则走default,如果不加default则会出现死锁

package main

import "fmt"

func main() {

	ch := make(chan int, 1)
	ch2 := make(chan int, 2)
	//插入数据
	ch <- 1
	ch2 <- 2
	select {
		case a := <-ch:
			fmt.Println("aa:", a)
		case b := <-ch2:
			fmt.Println("bb:", b)
		default:
			fmt.Println("默认")
	}
}

 

socket

 创建server.go,并启动

package main

import (
	"fmt"
	"net"
)

func main() {
	//创建服务器地址
	addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8888")
	//创建监听器
	lis, _ := net.ListenTCP("tcp4", addr)
	fmt.Println("服务器启动成功")
	//监听客户端传过来的数据
	conn, _ := lis.Accept()
	//转换数据
	b := make([]byte, 1024)
	n, _ := conn.Read(b)
	fmt.Println(string(b[:n]))
	//关闭连接
	conn.Close()
}

创建client.go并启动

package main

import (
	"fmt"
	"net"
)

func main() {
	fmt.Println("客户端启动")
	//创建服务器地址
	addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8888")
	//创建连接
	conn, _ := net.DialTCP("tcp", nil, addr)
	//发送数据
	conn.Write([]byte("你好啊,服务器"))
	//关闭连接
	conn.Close()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值