Go语言基础笔记(一)| 青训营笔记

186 阅读7分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

1、Golang介绍

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

特点

  • 简洁、快速、安全
  • 并行、有趣、开源
  • 内存管理、数组安全、编译迅速

Go 语言用途

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

开发环境搭建

  1. 下载golang的SDK安装包(环境变量会自动配置)

image-20220506161819807.png

  1. 安装并测试是否安装成功

image-20220506161856893.png

第一个Go程序

 package main
 ​
 import "fmt"
 ​
 func main() {
     fmt.Println("Hello, Golang!")
 }

要执行 Go 语言代码可以使用 go run 命令。

2、Golang语言基础

2.1 结构

Go 语言的基础组成有以下几个部分:

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

例如:

 package main
 ​
 import "fmt"
 ​
 func main() {
    /* 这是我的第一个简单的程序 */
    fmt.Println("Hello, World!")
 }
  1. 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
  2. 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
  3. 下一行 func main()程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
  4. 下一行 / ... / 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
  5. 下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 使用 fmt.Print("hello, world\n") 可以得到相同的结果。 Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。
  6. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

2.2 基础语法

Go 标记

Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。如以下 GO 语句由 6 个标记组成:

 fmt.Println("Hello, World!")

6 个标记是(每行一个):

 1. fmt
 2. .
 3. Println
 4. (
 5. "Hello, World!"
 6. )

行分隔符

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

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

以下为两个语句:

fmt.Println("Hello, World!") fmt.Println("Hello, Golang!")


注释

注释不会被编译,每一个包应该有相关注释。

单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾。如:

 // 单行注释
 /*
  我是多行注释
  */

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

以下是有效的标识符:

 mahesh   kumar   abc   move_name   a_123
 myname50   _temp   j   a23b9   retVal

以下是无效的标识符:

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

字符串连接

Go 语言的字符串可以通过 + 实现:

实例

package main import "fmt" func main() { fmt.Println("Golang" + "123") }

以上实例输出结果为:

 Golang123

关键字

下面列举了 Go 代码中会使用到的 25 个关键字或保留字:

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符:

appendboolbytecapclosecomplexcomplex64complex128uint16
copyfalsefloat32float64imagintint8int16uint32
int32int64iotalenmakenewnilpanicuint64
printprintlnrealrecoverstringtrueuintuint8uintptr

程序一般由关键字、常量、变量、运算符、类型和函数组成。

程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。

程序中可能会使用到这些标点符号:.、,、;、: 和 …。

2.3 数据类型

image-20220506163626749.png

2.4 语言变量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字:

 //单变量声明
 var identifier type
 //多变量声明
 var identifier1, identifier2 type

若未初始化则使用默认值

 数值类型(包括complex64/128)为 0
 ​
 布尔类型为 false
 ​
 字符串为 ""(空字符串)
 ​
 以下几种类型为 nil:
 var a *int
 var a []int
 var a map[string] int
 var a chan int
 var a func(string) int
 var a error // error 是接口

例如:

 package main
 ​
 import "fmt"
 ​
 //全局变量
 var n7 = 9.9
 ​
 //全局变量简写形式
 var (
     n8 = "jack"
     n9 = 123
 )
 ​
 func main() {
     // //1.指定变量数据类型
     // var age int
     // age = 19
     // fmt.Println(age)
 ​
     // //2.指定变量数据类型
     // var num int = 20
     // fmt.Println(num)
 ​
     // //3.未指定变量数据类型,根据=后面值自动补充数据类型
     // var name = "yg"
     // fmt.Println(name)
 ​
     // //4.简短形式,使用 := 赋值操作符(即省略var关键字)
     // sex := "男"
     // fmt.Println(sex)
     
     var i int
     var f float64
     var b bool
     var s string
     fmt.Printf("%v %v %v %q\n", i, f, b, s)
 ​
     var n1,n2,n3 = 10,"123",1.2
     fmt.Println(n1)
     fmt.Println(n2)
     fmt.Println(n3)
 ​
     var n4,n5,n6 int
     fmt.Println(n4)
     fmt.Println(n5)
     fmt.Println(n6)
 ​
     fmt.Println(n7)
     fmt.Println(n8)
     fmt.Println(n9)
 ​
 }

2.5 语言常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

常量的定义格式:

 const identifier [type] = value

你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。

  • 显式类型定义: const b string = "abc"
  • 隐式类型定义: const b = "abc"

多个相同类型的声明可以简写为:

 const c_name1, c_name2 = value1, value2

常量还可以用作枚举:

 const (
     Unknown = 0
     Female = 1
     Male = 2
 )

2.6 运算符

运算符用于在程序运行时执行数学或逻辑运算。

Go 语言内置的运算符有:

  • 算术运算符

  • 关系运算符

  • 逻辑运算符

  • 位运算符

  • 赋值运算符

  • 其他运算符

    • &返回变量存储地址&a; 将给出变量的实际地址。
      *指针变量。*a; 是一个指针变量

基本和其他语言类似

但是只有a++没有 ++a