简单易懂的Go语言基础语法总结1 | 青训营笔记

98 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

有着“21世纪的c语言”之称的Go语言是一个高性能,高并发的语言,因其接近于++, java的开发性能以及快速上手,简单易学的特性成为不少公司的选择。

为什么是GO?

GO语言的优点

  1. 高性能、高并发
  2. 语法简单、简单易学:较c++语言语法更简单,去掉了不必要多种语法,包括括号和while循环
  3. 丰富的标准库: 无需借助第三方库就可以完成开发,并且标准库稳定
  4. 完善的工具链: 错误检查、包管理、单元测试、性能测试等工具非常完善
  5. 静态链接:所有的编译结构都是静态链接的,只需要拷贝编译完成的可执行文件即可
  6. 快速编译:有着比c和c++语言更快的编译速度,上线之前本地的编译时间非常之快
  7. 跨平台:windows、macos、linus、路由器、树莓派上都可以编译运行
  8. 垃圾回收: 较好的垃圾回收机制不用考虑内存分配和释放,可专注于业务逻辑

字节跳动为什么选择Go语言

python性能问题,内部团队非java背景,go语言的学习成本低部署简单,内部RPC和http框架的推广

Go的安装

go.dev 下载go直接安装即可,集成开发环境可选择vscode和GoLand

Go基础语法

go语言可以直接运行也可以编译成可执行文件再运行

编译和运行

go build main.go // 编译
./main // 运行
go run main.go // 直接运行

基础语法-Hello World

导入fmt包,使用fmt.Println可直接输出一行字符串

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello world") // 输出hello world
}

fmt包中还有fmt.Printf格式化输出方式,和c语言的printf类似,但较c语言多了一个通用类型的输出%v, 使用时可以在后面接任意类型的变量

基础语法-变量

Go常见的变量类型有字符串string、整数int、浮点float、布尔型bool,变量的声明方式有两种方式:

  1. var 变量名 变量类型 = 值
var a string = "initial"
// 若后面有初始化值,可不用显式的写出声明的变量类型
// var a = "initial" 
  1. 变量名 := 值
a := "initial"

注:常量只要把var换成const即可

基础语法-if else

判断式没有括号, 括号不能写到同一行

if 7 % 2 == 0 {
    fmt.Println("7 is even")
} else {
    fmt.Println("7 is odd")
}

基础语法- 循环

只有for循环, for后不写任何东西就等于while循环

    for i := 0; i < n; i++ {
        
    }
    for {
        break
    }

基础语法- switch

默认不需要加break, 判断的变量可以是任意变量类型,并且可以用switch来构造死循环

switch a {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    default:
        fmt.Println("other")
}

基础语法-数组

var a [5]int // 声明一维数组
var towD [2][3]int //声明二维数组

基础语法-切片

切片是可变长度的数组,相当于c++中的vector,创建长度为3的字符串数组,容量为9,可以不写初始容量,当扩容时容量不够时会自动增加并返还一个新的切片

    s := make([]string, 3, 9)  

直接对切片进行赋值

    s[0] = "a"
    s[1] = "b"
    s[2] = "c"

可通过append在切片后面追加元素

    s = append(s, "d")
    s = append(s, "e", "f")

可以直接使用切片操作,但不支持负数索引

    fmt.Println(s[2:5]) // [c d e]

基础语法-map

声明和赋值如下, map的key可以是任意类型,包括数组和结构体, 采用_, ok := m[key]可判断是否key在mp中, ok是false时不在

    m := make(map[string]int)
    m["one"] = 1
    m["two"] = 2
    m2 := make(map[[26]int] int) // key为长度为26的数组

基础语法-range

可采用range遍历数组和map,语法如下:

    for i, num := range nums { // 索引 值
        
    }
    
    for k, v := range m { // 键 值
        
    }