- 进程间的通信,同步
package main
import (
"fmt"
"os"
)
func main() {
path := os.Getenv("GOPATH")//获取环境变量
//exec.Command() 获取子进程和输入输出
fmt.Println(os.Args) //进程相关的信息
fmt.Println(path)
}
-
两种通信方式--共享管道通信,和共享内存方式进行通信
-
共享管道方式--通过chan来共享信息,实现通信
-
c :=make(chan int),比如这个,通过make来对其开辟空间,这是无缓冲的chan,数据类型为整形 -
c :=make(chan int ,3),通过make来对其开辟空间,这是有缓冲chan,缓冲区大小为3 -
有缓冲和无缓冲的区别:无缓冲chan写入数据之后,需要等待其他进程从中取数据,这个过程就会阻塞,其他进程要从中读取数据的话,也需要阻塞,等待有数据进来;有缓冲的chan,缓冲区满之前,不需要等待别人取数据,也就是不会阻塞。
-
如何读取数据:
chan<-3将3这个数据写进去;<-chan,chan中的数据取出并丢掉;c :=<-chan,chan中的数据取出来,并且存到c中 -
共享内存:,比如:
package main
import (
"fmt"
"sync"
"time"
)
var (
x int
lock sync.Mutex
)
func memeryOn() {
for i := 0; i < 5; i++ {
lock.Lock()
x += 1
fmt.Println(x)
lock.Unlock()
}
}
func memeryOff() {
for i := 0; i < 5; i++ {
x += 1
fmt.Println(x)
}
}
func main() {
x = 0
go memeryOn()
time.Sleep(2 * time.Second)
x = 0
go memeryOff()
time.Sleep(2 * time.Second)
}
- 共享内存时需要加锁: 如何加锁呢?-----》lcoak sync.mutex 然后调用里面的方法,来实现获取锁和释放锁 不建议使用共享内存来实现进程间通信,应该使用管道 因为共享内存会出现未知的错误
- lock()获取锁;unlock()释放锁
- go mod 管理
- 使用gopath太低效
- go mod init 进行初始化
- go get 下载相关依赖
- proxy,下载资源的路径,direct源地址,如果proxy里的下不到东西,就去原网址进行下载
- 默认使用最低兼容版本,最新版
大概就这些吧