1、windows环境搭建
1、安装go
2、安装goland开发工具包
2、test.go
/* 可执行文件,包名必须是main */ package main /* fmt 字符串格式化的包 */ import "fmt" /*main入口函数*/ func main() { fmt.Printf("Hello, world" ) }
3、go函数定义
//go函数定义 func add(a int ,b int) int { var sum int //var表示变量,sum变量名称,int表示变量类型 sum = a+b return sum }
4、go语言特性
1、垃圾回收
a、内存自动回收,再也不需要开发人员管理内存
b、开发人员专注业务实现,降低了心智负担
c、只需要new分配内存,不需要释放
2、天然并发
a、从语言层面支持并发,非常拣单
b、goroute,轻量级线程、创建成千上万个goroute成为可能
c、基于CSP(Communicating Sequential Process)模型实现
案例:(使用关键字go)
func test_print(a int) { fmt.Println(a) } for i:=0;i<100;i++{ go test_print(i) }
3、channel
a、管道,类似nuix/linux中的pipe
b、多个goroute之间通过channel进行通信
c、支持任何类型
/*make关键字,分配内存空间*/ func main(){ pipe:=make(chan int ,3) //定义一个pipe变量,管道容量为3,管道类似于队列 pipe <- 1 //将1放入管道 pipe <- 2 fmt.Println("pipe长度:",len(pipe)) var t1 int t1 =<- pipe //从管道取值放入变量t1中 fmt.Println(t1) }
4、多返回值
a、一个函数返回多个值
func calc(a int ,b int ) (int ,int) { c:=a+b d:=(a+b)/2 return c,d }
5、包的概念(go语言不需要担心编码问题,都默认为utf8)
1、和python一样,把相同的功能代码放在一个目录,称之为包
2、包可以被其他包引用
3、main包是用来生成执行文件,每个程序只有一个main包
4、包的主要用途是提高代码的可复用性
6、变量定义两种方式
方式1:
var sum int //var表示变量,sum变量名称,int表示变量类型
sum = 0
方式二:
sum:=0
7、函数多返回值 (注意占位符"_"使用)
func calc(a int ,b int ) (int ,int) { c:=a+b d:=(a+b)/2 return c,d } func main1() { sum ,avg:=calc(200,300) fmt.Println("sum=",sum,",","avg=",avg) a ,_:=calc(200,300) //_表示不取返回值 fmt.Println("sum=",a,) }
FAQ:
问题1:
# command-line-arguments srclesson-one est.go:36: undefined: test_goroute 一个文件调用另一个文件的函数,必须两个文件都被编译为二进制文件,才能执行,否则报错 为了解决这种问题,可以执行整个包