go学习day1

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、包的主要用途是提高代码的可复用性  

目录组织结构

go学习day1

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

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

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

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

4、保留关键字

go学习day1

二、go程序的基本结构

package main

import "fmt"

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

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

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

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

4、包中函数调用:

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

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

5、包访问控制规则:

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

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

    包外部不能访问

上一篇:Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩,多线程面试题2021


下一篇:k8s-v1.20安装metrics-server