Go 语言入门 | 青训营

98 阅读6分钟

一、go语言特点

1. go思想

Less can be more 大道至简,小而蕴真,让事情变得复杂很容易,让事情变得简单才难,深刻的工程文化。

2. go语言的优点

  1. 自带gc。
  2. 静态编译,编译好后,扔服务器直接运行。
  3. 简单的思想,没有继承,多态,类等。
  4. 丰富的库和详细的开发文档。
  5. 语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。
  6. 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
  7. 超级简单的交叉编译,仅需更改环境变量。

3. go语言的特点

  1. 自动立即回收。
  2. 更丰富的内置类型。
  3. 函数多返回值。
  4. 错误处理。
  5. 匿名函数和闭包。
  6. 类型和接口。
  7. 并发编程。
  8. 反射。
  9. 语言交互性。

二、go语言基础

1. go文件名

所有的go语言源码文件都是以.go结尾的

2. go标记

go程序由多个标记组成,包括关键字,标识符,常量,字符串,符号。
例如,以下go语句由 6 个标记组成:

fmt.Println("Hello, World!")
//一行是一个标记,共6个标记
1. fmt
2. .
3. Println
4. (
5. "Hello, World!"
6. )

3. 关键字

go只有25个关键字

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

go还有37个保留字

Constants:    true  false  iota  nil

Types:    int  int8  int16  int32  int64  
          uint  uint8  uint16  uint32  uint64  uintptr
          float32  float64  complex128  complex64
          bool  byte  rune  string  error

Functions:   make  len  cap  new  append  copy  close  delete
             complex  real  imag
             panic  recover

程序一般由关键字、变量、常量、运算符、类型和函数组成。
程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
程序中可能会使用到这些标点符号:. , ; : …

4. 标识符

标识符用来 命名 变量、类型等程序实体。一个标识符实际上是由一个或是多个字母(大写或小写)、数字(0~9)、下划线_所组成的序列,但是第一个字符必须是字母或下划线而不能是数字。 以下是有效的标识符:

mahesh   kumar   abc   move_name   a_123
myname50   _temp   j   a23b9   retVal

以下是无效的标识符:

1. 1ab(以数字开头)
2. case(Go 语言的关键字)
3. a+b(运算符是不允许的)

另外:以大写字母开头的标识符可导出

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

总结: go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则: 1)首字符可以是任意的Unicode字符或者下划线; 2)剩余字符可以是Unicode字符、下划线、数字; 3)字符长度不限。

go语言声明

有四种主要声明方式:

var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)

go程序保存在多个.go文件中,文件的第一行就是 package XXX 声明,用来说明 该文件属于哪个包(package),package声明下来就是import声明(导入哪些包),再下来是类型,变量,常量,函数的声明。

声明的位置决定其作用域: 1)声明在函数内部,是函数的本地值,类似 private; 2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似 protect; 3)声明在函数外部且首字母大写是所有包可见的全局值,类似 public.

6. 不存在分隔符

在go程序中,一行代表一个语句结束。
不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由go编译器自动完成。

如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中并不鼓励这种做法。

7. { 不能单独放在一行

表示函数体开始的前花括号{ 不能单独放在一行。
例如,以下代码运行会报错:

package main

import "fmt"

func main()  
{  // 错误,{ 不能在单独的行上
    fmt.Println("Hello, World!")
}

错误内容:

.\main.go:13:6: missing function body
.\main.go:14:1: syntax error: unexpected semicolon or newline before {

正确代码:

package main

import "fmt"

func main() {  //“{”没有单独在一行
   fmt.Println("Hello, World!")
}

8. 实现字符串连接:+

package main
import "fmt"
func main() {
    fmt.Println("Google" + "Runoob")
}

以上实例输出结果为:

GoogleRunoob

9. 空格的使用

  1. go语言中变量的声明必须使用空格隔开,如:
var age int;
  1. 而且空格的使用会使得程序更加可读和美观。

10. 格式化字符串:fmt.Sprintf

go语言中可以使用 fmt.Sprintf 格式化字符串并赋值给新串:

package main

import (
    "fmt"
)

func main() {
   // %d 表示整型数字,%s 表示字符串
    var stockcode=123
    var enddate="2020-12-31"
    var url="Code=%d&endDate=%s"
    var target_url=fmt.Sprintf(url,stockcode,enddate)
    fmt.Println(target_url)
}

输出结果为:

Code=123&endDate=2020-12-31

fmt.Sprintf 格式化字符串的格式如下:

fmt.Sprintf(格式化样式, 参数列表…)
  1. 格式化样式:字符串形式,格式化符号以 % 开头, %s 字符串格式,%d 十进制的整数格式。go字符串格式化符号:
格式描述
%v按值的本来值输出
%+v在%v基础上,对结构体字段名和值进行展开
%#v输出Go语言语法格式的值
%T输出Go语言语法格式的类型和值
%%输出%本体
%b整型以二进制方式显示
%o整型以八进制方式显示
%d整型以十进制方式显示
%x整型以十六进制方式显示
%X整型以十六进制、字母大写方式显示
%UUnicode字符
%f浮点数
%p指针,十六进制方式显示
  1. 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

三、总结

Go语言是一种新颖并且没有大面积普及的语言,拥有高性能、高并发;语法简单、学习曲线平缓;丰富的标准库;完善的工具链;静态链接;快速编译;跨平台;垃圾回收等特点,由于各种原因,现在也正在被各大互联网公司所使用。它能长期保持简单性、稳定性和健壮性。Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言: Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。Go 的标准库高效、简洁、正确地实现了丰富的网络协议,并巧妙地结合了协作/抢占式多任务处理模型,因此使用 Go 编写可扩展的互联网软件非常容易。