Go语言入门 | 青训营笔记

66 阅读4分钟

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

关于GO

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

GO的安装和IDE安装

这里都是傻瓜式安装,GO安装直接到官网上下载即可,一般安装时会自动将GO的环境变量加入到系统Path中,IDE推荐JBrain的GoLand IDE,和IDEA环境一样,简直不要太爽!

GO的语言结构和基础语法

一个简单的GO程序如下,一般GO的语言结构包含:包声明、引入包、函数、变量、语句、注释。

package main  // 包声明

import "fmt"  // 引入包

func main() {  // 函数
	fmt.Println("Hello, Go!")
}

要执行Go程序,首先保存文件为xxx.go,在命令行输入go xxx.go或者直接在IDE中单击绿色小箭头即可运行。

一些基础语法:

  • 无需分号结尾,跟Python一样用分行代表一个语句
  • 右花括号 { 不可以单独一样,例如下面的例子是不行的:
func main()
{
    xxx...
}  // error

GO的变量、常量与运算符

变量

以一个例子来记住声明的格式:

package main  // 包声明

import "fmt" // 引入包

func main() {  // 函数
	var a = "This is a string"
	fmt.Print(a)
}

也可以不使用var,直接使用val := 1即可,但注意这种写法仅能用在声明,不可用在再次赋值,否则出错。

关于值类型和引用类型

所有像 int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值;当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝。

更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。

常量

GO中的常量数据类型只能是数字类型、布尔类型和字符串型,一般采用const xxx=yyy即可。

运算符

与C/JAVA一致

GO的条件与循环

条件

  • if
  • if-else
  • if嵌套
  • switch
  • select(无对应的case会阻塞当前进程)

循环

  • for
  • for嵌套
  • break,continue,goto

GO的函数与变量作用域

函数

一个GO文件必须有main()函数,一个函数一般由几个部分组成:func函数声明、函数名、参数列表、返回类型、函数体

package main  // 包声明

import "fmt" // 引入包

func min(x, y int) int  {
	var result int
	if (x > y) {
		result = y
	} else {
		result = x
	}
	return result
}

func main() {  // 函数
	fmt.Print(min(5,3))
}


关于传参:

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

变量作用域

Go 语言中变量可以在三个地方声明:

  • 函数内定义的变量称为局部变量,作用域只在函数体内
  • 函数外定义的变量称为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用;Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。
  • 函数定义中的变量称为形式参数

GO的数据结构

数组

初始化

// method 1
var arr = [5]float32{xxx,xxx,xxx,xxx,xxx}
// method 2
arr := [5]float32{xxx,xxx,xxx,xxx,xxx}


访问

使用[]运算符即可访问,这与C/JAVA是一致的。

指针

GO的指针用法与C一致,GO中的空指针定义为nil。

结构体

和C一样,定义字段,同时用点运算符完成赋值或计算,下面是一个例子:

package main  // 包声明

import "fmt" // 引入包

type Language struct {
	name string
	difficulty string
}

func main() {  // 函数
	a := Language{"C++", "hard"}
	b := Language{"JAVA", "hard"}
	c := Language{"GO", "medium"}
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
}


output:
{C++ hard}
{JAVA hard}
{GO medium}


切片

这里的切片和Python中的切片概念是一样的,非常简单,参见 www.runoob.com/go/go-slice… 学习。