xone

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

go语言特性

1、垃圾回收

  a、内存自动回收,再也不需要开发人员管理内存

  b、开发人员专注业务实现,降低了心智负担

  c、只需要new分配内存,不需要释放

2、天然并发

  a、从语言层面支持并发,非常简单

  b、goroute,轻量级线程,创建成千上万个goroute成为可能

  c、基于CSP(Communicating Sequential Process)模型实现

 高并发示例

package main

import (
	"fmt"
)

func test_print(a int)  {
	fmt.Println(a)
}

func main()  {
	for i := 0; i < 100; i++ {
		go test_print(i)
	}
}

3、channel

  a、管道,类似unix/linux中的pipe

  b、多个goroute之间通过channel进行通信

  c、支持任何类型

例一  

func main()  {
        var pipe chan int
	pipe = make(chan int, 3)
	pipe <- 1
	pipe <- 2
}

例二  

package main

import "fmt"

var pipe chan int	//声明变量

func add(a int, b int) int  {
	sum := a + b
	pipe <- sum
	return sum
}

func main()  {
	pipe = make(chan int, 1)	//创建管道
	go add(2,3)
	sum :=<- pipe	//等待pipe里有数据才继续执行
	fmt.Println("sum =",sum)
}  

例三

package main

import "fmt"

func add(a int, b int, c chan int) int  {
	sum := a + b
	c <- sum
	return sum
}

func main()  {
	var pipe chan int
	pipe = make(chan int, 1)	//创建管道
	go add(2,3, pipe)
	sum :=<- pipe	//等待pipe里有数据才继续执行
	fmt.Println("sum =",sum)
}

  

注意:

var pipe chan int
pipe = make(chan int, 3)  

上面的代码跟下面的代码意思是一样的 

pipe := make(chan int, 3)

 

4、多返回值

  a、一个函数返回多个值  

package main

import "fmt"

func calc(a int, b int) (int,int)  {
	c := a + b
	d := (a + b)/2
	return c, d
}

func main()  {
	sum, _ := calc(2,4)
	fmt.Println("sum=",sum)
}

 

包的概念

1、和python一样,把相同功能的代码放到一个目录,称之为包

2、包可以被其它包引用

3、main包是用来生成可执行文件,每个程序只有一个main包

4、包的主要用途是提高代码的可复用性  

 

目录组织结构

 

 

一、文件名&关键字&标识符

1、所有go源码以.go结尾

2、标识符以字母或下划线开头,大小写敏感

3、_是特殊标识符,用来忽略结果

4、保留关键字

 

 

二、go程序的基本结构

package main

import "fmt"

func main()  {
	fmt.Println("hello")
}

1、任何一个代码文件隶属于一个包

2、import关键字,引用其他包

3、golang可执行程序,package main,并且有且只有一个main入口函数

4、包中函数调用:

  a.用一个包中函数,直接调用

  b.不同包中函数,通过包名+点+函数名进行调用

5、包访问控制规则:

  a.大写意味着这个函数/变量是可导出的

  b.小写意味着这个函数/变量是私有的,

    包外部不能访问

 

posted on 2018-06-21 08:53  周小百  阅读(113)  评论(0编辑  收藏  举报