go语言运行为何性能好
1、并发:多线程在一个核的cpu上运行 2、并行:多线程在多核的cpu上运行 并行可以理解为实现并发的手段。 3、协程:用户态,轻量级线程,栈kb级别 线程:内核态,线程跑多个协程,栈MB级别 4、如何开启协程? 快速打印:开多个协程 go func(){ //在函数名前面加一个go关键字就能够创建协程 } 5、通过共享内存实现通信 6、channel引用类型,通过make关键字创建。 make(chan int)无缓冲队列 make(chan int,3)有缓冲队列,消费者的消费速度比打印慢,所以要有缓冲。可以解决生产和消费速度带来的效率问题。 7、并发存在安全问题,可以通过加锁解决,保证并发安全。 8、go的依赖管理 三个阶段 gopath—>govendor->go module 不同项目依赖的版本不同,能控制依赖库的版本 (1)gopath是go语言支持的环境变量,是go项目的一个工作区。bin项目编译生成的二进制文件 pkg是项目编译的中间产物,加速编译 src是项目源码,项目代码直接依赖src下的源码 gopath的弊端:A、B函数可能不兼容,无法实现package的多版本控制。 (2)govendor 项目目录下会多一个vendor的文件夹,依赖会先从vendorde目录下进行获取,存放了依赖的副本。 解决了gopath的弊端。 govendor 的弊端:无法控制依赖的版本。如果packageB和packageC两个又分别依赖两个package包,那么可能会造成依赖冲突,导致编译错误。 (3)gomodule 可以定义版本规则和管理项目依赖关系 9、依赖管理三要素 (1)配置文件,描述依赖 go.mod (2)中心仓库管理依赖库 proxy (3)本地工具 go get/mod 10、gomod中非直接依赖会标示出来, 11、依赖配置,如果x项目依赖了A、B两个项目,且A、B分别依赖了c项目的v1.3、v1.4,那么最终编译的时所使用的c项目的版本选最低兼容版本
12、依赖分发-回源 proxy-服务站点,缓存原站中的软件内容,删除了某个proxy可以满足依赖的稳定性。 proxy可以解决很多问题。 使用过程中的配置:goproxy:“https://prixy1.cn,https://prixy2.cn,direct” 13、go.mod tidy增加需要的依赖和删除不需要的依赖,每次提交项目的时候可以tidy一下。
go第一节课作业1
package main
import ( "fmt" "math/rand" "time" )
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
// fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
for {
var guess int
fmt.Scanf("%d", &guess)
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}