今天我们一起了解下go的语言特性和语言结构吧。

语言特性

简介: Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率。一个表达式来形容 Go 语言: Go=C+Python。说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。

  1. 与 C 语言一致的理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等,也保留了和 C 语言一样的编译执行方式及弱化的指针。 案例:接收一个指针,用*符号取得指针, 对所指向的值进行赋值操作。
1
2
3
func testPtr(num*int){
*num=20
}
  1. Go 语言的一个文件都要归属于一个,而不能单独存在, 用于组织程序结构;否则无法编译。 案例:
1
2
3
4
5
6
package main //一个go文件需要在一个包内
import "fmt" //引入的包
func sayok(){
//输出一句话
fmt.Println("ok")
}
  1. 垃圾回收机制,内存自动回收,不需开发人员管理。程序员只关注业务逻辑。不像 C 语言,垃圾回收需要程序员自行管理,可能出现内存泄漏。

  2. 天然并发【重要特点】C 与 Java 比不上。云计算偏爱此语言的基础。

  1. 从语言层面支持并发,实现简单
  2. 引入轻量级线程-goroutine,可实现大并发处理,高效利用多核
  3. 基于 CPS 并发模型(Communicating Sequential Processes )实现
  1. 吸收了管道通信机制,形成 Go 语言特有的管道 channel。通过管道 channel ,可以实现不同的 goroute之间的相互通信。
  2. 函数可以返回多个值。 案例:
1
2
3
4
5
6
7
8
package main 
//写一个函数,实现同时返回 和,差
//go 函数支持返回多个值
func getSumAndSub(n1 int, n2 int) (int, int) {
sum := n1 + n2 // go 语句后面不要带分号。编译器自动加上分号
sub := n1 - n2
return sum, sub
}
  1. 新创新:切片slide【类似Java集合】延时执行defer【函数执行完后,再执行某操作】等 8)错误处理,类型和接口,反射,语言交互性

语言结构

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

案例:

1
2
3
4
5
6
package main 
import "fmt" //引入的包
func main(){
//偷出一句话
fmt.Println("ok")
}

解释:

  1. package main定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  2. import "fmt"告诉编译器程序运行需要用fmt包。
  3. func main() 是程序开始执行的函数,main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
  4. {}中"{"不可以单独放一行。
  5. 注释在程序执行时将被忽略。//单行注释, /* ... */ 多行注释也叫块注释,不可以嵌套使用,一般用于包的文档描述或注释成块的代码片段。
  6. fmt.Println(...) 将字符串输出到控制台,并在最后自动增加换行字符 。用 fmt.Print("hello, world") 可以得到相同的结果。

参考

[1] https://www.bilibili.com/video/BV1ME411Y71o?p=6

[2] https://github.com/datawhalechina/go-talent/blob/master/0.Go初探.md