Go语言

Golang语言的特点
  • 简介:
    • Go语言保证了既能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式形容Go语言,Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。
    • 从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
      1
      2
      3
      4
      //num为变量、int为变量类型、*为指针,即为一个指针类型的变量
      func testPtr(num *int){
      *num = 20
      }
  • 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
    1
    2
    3
    4
    5
    6
    7
    8
    //一个go文件需要一个包(包名'main'可以自己进行定义)独角兽(黑龙江)企业管理有限公司
    package main
    //因为下面函数方法中使用了"fmt",所以需要引入fmt(go语言中自带)的包
    import "fmt"
    func sayOk(){
    //使用了fmt
    fmt.Println("ok")
    }
  • 垃圾回收机制,内存自动回收,不需要开发人员管理【出现内存泄漏】
  • 天然并发(重要特点)
    • 从语言层面支持并发,实现简单
    • goroutine,轻量级线程,可实现大并发处理,高效利用多核
    • 基于CPS并发模型(Communicating Sequential Processes)实现
  • 吸收了管道通信机制,形成Go语言特有的管道channel,通过管道channel,可以实现不同的goroute之间的相互通信
  • 函数返回多个值(示意代码)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //写一个函数,实现同时返回 和、差
    //go 函数支持返回多个值
    //其中n1后面跟的int表示明确变量的类型,后面括号中(int,int)表示返回的数据类型
    func getSumAndSub(n1 int,n2 int)(int,int){
    sum := n1 + n2 //go语句后面不要带分号(;)
    sub := n1 - n2
    return sum , sub
    }

  • 新的创新,比如切片slice、延时执行defer等
Golang语言快速入门(省略安装步骤)
  • go文件的后缀是.go
  • package main:表示该hello.go文件所在的包是main,在go中,每个文件都必须归属一个包。
  • import “fmt”:表示引入一个包,包名fmt,引入该包后,就可以使用fmt包的函数。比如:fmt.Println。
  • func main(){}:func是一个关键字,表示一个函数,main是函数名,是一个主函数,即我们程序的入口。
  • fmt Println(“hello world!”):表示调用fmt包的函数Println输出”hello world!”。
  • 通过go build命令对该go文件进行编译,生成.exe文件,(命令行:go build hello.go,生成hello.exe文件)
  • 运行hello.exe即可
  • 注意:通过go run 命令可以直接运行hello.go程序【类似执行一个脚本文件的形式】(生成.exe文件后运行.exe文件要比go run运行速度快)
Golang执行流程分析
  • 如果是对源码编译后,再执行,Go的执行流程图如下
    case_exe.png
  • 如果对源代码直接执行go run源代码,Gode执行流程如下图
    case_run.png
  • 说明:两种执行流程的方式区别
    • 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
    • 如果我们是直接go run go源代码,那么如果要在另外一台机器上这么运行,也需要go开发环境,否则无法执行。
    • 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多。
  • 有了go源文件,通过编译器将其编译成机器可以识别的二进制码文件。
  • 在该源文件目录下,通过go build 对hello.go文件进行编译。可以指定生成的可执行文件名,在Windows下,必须是.exe后缀。(示例:go build -o myhello.exe hello.go)。
  • 如果程序没有错误,编译没有任何提示,会在当前目录下出现一个可执行文件(Windows下是.exe Linux下是一个可执行文件),该文件是二进制码文件,也是可以执行的程序。
  • 如果程序有错误,编译时,会在错误的那行报错