Go语言入门

最近开始搭建个人网站,在后端技术栈的选择上犹豫了很久。综合了网络上的各种评价最终选择了golang。作为一个新近开源的语言,go语言较为简单,符合我的需求同时具有完善的框架。

概述

Go语言被设计成一门应用于搭载在Web服务器,存储集群,或其他类似用途的服务器系统编程语言。Go相对于其他大多数语言有着更高的开发效率。

Go语言于2009年开源,未来前景相当不错。

官方网站

官方中文文档

基础

Go语言的基础内容和语法

包(package)

每个Go程序都是由包构成。按照约定,包名与导入路径的最后一个元素一致,例:math/rand 中的源码均以package rand 语句开始。

示例1:package.go

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
"math/rand"
)

func main() {
fmt.Println("我最爱的数字是",rand.Intn(10))
}

运行结果1:

首先要把源码编译成二进制文件,直接在shell里面输入命令

1
$ go build package.go

运行编译完成的二进制文件

1
$ .\packages.exe

可以看到shell输出了结果

1
我最爱的数字是 1

包的导入和导出(import & export)

示例1展示了包的“分组”导入形式,即

1
2
3
4
import (
"fmt"
"math/rand"
)

Go也同时支持多个导入语句

1
2
import "fmt"
import "math/rand"

包的导出名均以大写字母开头,例如:math.Pi,在包外只能使用已导出的名字,任何“未导出”的名字在该包外均无法访问,例如math.pi编译后运行便会报错

示例2:exported.go

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.pi)
}

编译运行

1
2
$ go build .\exported.go
$ .\exported.exe

输出

1
2
.\exported-names.go:9:14:cannot refer to unexported name math.pi
.\exported-names.go:9:14:undefined:math.pi

改为math.Pi后报错消失

函数(funtion)

函数的定义格式如下:

1
2
3
func function_name( [parameter list] ) [return types] {
function body
}
  1. func :函数开始声明

  2. function_name:函数的名称,函数名和参数列表一起构成函数签名

  3. parameter list:参数列表,每个参数需要声明其名称和类型,类型在变量名之后。函数可以没有参数或者接受多个参数,多个参数用逗号进行分隔,多个形参类型相同时可以采用省略写法,例如:

1
x int , y int

1
x , y int

的效果是相同的

  1. return_types:返回类型,函数返回值的数据类型,与参数相同,函数也可以返回任意数量的返回值,不需要返回值的情况下return_typs不是必须的

  2. function body:函数体,没啥好说的,函数定义的代码段

示例3:function.go

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func add(x,y int) int {
return x+y
}

func main() {
fmt.Println(add(42,13))
}

编译运行

1
2
$ go build .\function.go
$ .\function.exe

输出55

函数的返回值可以被命名,其名称应具有一定的意义,并可以作为文档使用,例如

1
2
3
4
5
func split(sum int) (x,y int) {
x=sum*4/9
y=sum-x
return
}

没有参数的return语句会返回已命名的返回值,即直接返回,直接返回在长的函数中会影响其可读性

变量(variables)

变量的定义格式如下

1
var [ variable_name ] [ variable_type ] = [ variable_value ]
  1. var:变量的声明开始;

  2. variable_name:变量的名称;

  3. variable_type:变量的数据类型;

  4. variable_value:变量声明的初始值,如果初始化值已存在,则可以省略类型;

变量还可以用简洁赋值语句:=声明并赋值,例如

1
x := 3

这种方式只能在函数内使用,函数外的每个语句都必须以关键字开始

没有明确初始值的变量声明会被赋值零值,不同类型的零值分别为:

  1. 数值类型为0
  2. 布尔类型为false
  3. 字符串为""(空串);

Go的基本数据类型如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool // 布尔值

string // 字符串

int int8 int16 int32 int64 // 整型
uint uint8 uint16 uint32 uint64 // 无符号整型

byte // uint8的别名

rune // int32的别名
// 表示一个unicode码点

float32 float64 // 浮点型

complex64 complex128 // 复数型

通过表达式T(v)可以将变量进行类型转换,例如

1
2
3
var i int = 42
var f float64 = float64(i) //将整型变量i转换为浮点型变量f
var u uint = uint(f) //将浮点型变量f转换为无符号整型变量u

或者还可以写成更加简洁的形式

1
2
3
i := 42
f := float64(i)
u := uint(f)

注意Go在不同类型之间赋值需要显式转换

常量

常量与变量的声明方法类似,只不过使用const关键字,常量可以是字符、字符串、布尔值或数值

1
2
3
const pi = 3.14 // 声明一个数值常量
const world = "世界" // 声明一个字符串常量
const truth = true // 声明一个布尔值常量

注意:

  1. 常量不能使用:=语法声明
  2. 未指定类型的常量由其上下文决定

总结

本篇文章大致梳理了Go语言的一些基本语法,总体来讲Go的语法还是比较简洁易懂,基本上还是很好理解的。

作者

Luc_41

发布于

2020-03-13

更新于

2020-03-23

许可协议

评论