GO语言的基础语法 | 青训营

64 阅读3分钟

go基础语法

执行GO

GO语言是一门编译型语言,GO语言的工具将源码及其依赖转换为计算机的机器指令。

// 使用go run来运行我们的代码
go run helloworld.go
// 使用go build来生成二进制文件
go build helloworld.go

GO语言以命令的方式提供很多使用工具,在实际工作中我们非常依赖这些工具。

build            compile packages and dependencies
clean            remove object files
doc              show documentation for package or symbol
env              print Go environment information
fmt              run gofmt on package sources
get              download and install packages and dependencies
install          compile and install packages and dependencies
list             list packages
run              compile and run Go program
test             test packages
version          print Go version
vet              run go tool vet on packages
init             create go.mod

导包和引用

GO语言使用包系统来简化程序设计和维护工作,我们需要在程序的开头进行显式的包声明。

package main
// 一个引用
import "fmt"
// 多个引用
import (
    "fmt"
    "time"
    ......
)

数据类型

与其他的语言不同,GO的变量类型是在变量名之和的,这有利于增加代码的可读性。

var a,b int = 1, 2 // var 变量名 类型 = 表达式
  • 如果变量初始化时没有赋值将会用零值进行初始化,数字类型对应的是0、布尔类型对应的是false、字符串类型对应的是空字符串、引用类型对应的是nil
  • 在使用函数时,可以使用:=来简短地声明变量,类型根据表达式自动推导
t := 0.0
freq := rand.Float()*3.0
  • Go语言是静态类型语言,对于同一变量而言,一旦声明类型将不在改变

数组

数组是一个有固定长度的、有特点类型元素组成的序列。由于数组长度固定,在实际中较少使用到,一般使用切片slice,slice是可变长度的数组。

var a [3]int
var b [3]int = [3]int{1,2,3}
var c [3]int = [3]int{1,2} //fmt.Println(c[2]) "0"
q := [...]int{1,2,3,4} //数组q大小由实际大小决定

切片

实现原理:设定默认长度的数组,如果超过该长度,则生成一个更大的数组,将原数组内容复制到新数组中,这一过程将会损失性能,所以要尽量在初始化切片时规定好大小来减少性能损失。

// 切片的定义需要用到make
s := make([]string, 3) //一个大小为3,类型为string,名字为s的切片
a := make([]string, 5) //a{a b c d e f}
fmt.Println(a[2:5]) //切25直接,没有5,c d e
fmt.Println(a[:5]) //切前5a b c d e
fmt.Println(a[:2]) //切断前2个 c d e f

哈希表Map

Map是一个无序的key/value的集合,也叫映射。无序是指他无法用range进行顺序输出。对于Map也要尽可能初始化时给出具体的大小,减少性能损失。

ages := make(map[string]int) //value is string, key is int

结构体

结构体在GO中非常重要,他的定义方法和声明方法如下

type Employee struct {
    ID        int
    Name      string
    Address   string
    DoB       time.Time
    Position  string
    Salary    int
    ManagerID int
}

var dilbert Employee

range

range关键字用于迭代数组、切片、Map和字符串,返回其索引或对应值。

nums := []int{1, 2, 3, 4, 5}
for index, value := range nums {
    fmt.Println(index, value)
}

函数

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。函数的返回值列表也放在了后面,这样做也是为了增加代码的可读性。

func name(parameter-list) (result-list) {
    body
}

if判断和循环

和其他语言的if大差不差。

if 判断条件 == 判断结果{
    执行
}

循环上只保留了for循环,简化了操作。

心得

以上是我对GO语言基础语法的简单认识,如果有误请多指正!