zoukankan      html  css  js  c++  java
  • 1. Go语言—初始

    一、golang语言特性

    1. 垃圾回收

    • 内存自动回收,再也不需要开发人员管理内存
    • 开发人员专注业务实现,降低了心智负担
    • 只需要new分配内存,不需要释放

    2. 天然并发

    • 从语言层面支持并发,非常简单
    • goroutine,轻量级线程,创建成千上万个goroutine成为可能
    • 基于CSP(Communicating Sequential Process)模型实现 [goroutine + pipe]
    package main
    
    func test_goroute(a int, b int) int {
    	var test_sum int
    	test_sum = a + b
    	return test_sum
    }
    
    func main(){
    	go test_goroute(1,2)
    }
    
    package main
    
    import "fmt"
    
    func test_goroute(a int) {
    	fmt.Println(a)
    }
    
    func main() {
    	for i := 1; i < 100; i++ {
    		go test_goroute(i)
    	}
    
    }
    

    3. 管道

    • 管道,类似linux中的pipe
    • 多个goroutine之间通过channel进行通信
    • 支持任何类型
    func main() {
    	// make开辟一个内存,chan为长度为3整型管道
    	pipe := make(chan int, 3)
    	// 向管道填值
    	pipe <- 2
    	pipe <- 2
    	pipe <- 2
    	fmt.Println(len(pipe))
    	var t int
    	// 取值
    	t =<- pipe
    	fmt.Println(t)
    }
    
    // 通过管道求和
    package main
    
    import (
    	"time"
    	"fmt"
    )
    
    func add(a int, b int, c chan int) {
    	sum := a + b
    	time.Sleep(3*time.Second)
    	c <- sum
    }
    
    func main() {
    	var pipe chan int
    	pipe = make(chan int, 1)
    	go add(1,2,pipe)
    	sum := <- pipe
    	fmt.Println(sum)
    }
    

    4. 多返回值

    • 一个函数返回多个值
    func calc(a int, b int) (int, int){
        sum := a + b
        avg := (a+b)/2
        return sum, avg
    }
    
  • 相关阅读:
    不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean
    VS2010水晶报表的添加与使用
    使用SelectClipRgn注意事项
    使用SelectClipRgn注意事项
    使用事件CreateEvent注意事项
    【转】Delphi内嵌ASM简易教程
    栈顶和栈底示意图
    【转】对ARM堆栈的理解
    UISegmentedControl的基本使用
    C语言小知识总结
  • 原文地址:https://www.cnblogs.com/hq82/p/11069523.html
Copyright © 2011-2022 走看看