从Hello World开始走进Go语言 | 青训营笔记

68 阅读4分钟

前言

通过以下简短的代码就可以完成Hello World的输出!就让我们从这里开始学习Go语言的基础知识。

package main  
  
import "fmt"  
  
func main() {  
    fmt.Print("Hello World")  
}

准备工作

  1. 安装Go(自行上网安装并配置环境变量等)
  2. 选择一件趁手的武器(IDE),选择GoLang或Vscode均可
  • 相信大家在学习Go语言之前已经接触过其他语言,学习过程中和其他语言比较着学习效果更佳!

1. 变量和基本数据类型

1.1 变量

Go语言中变量和其他语言定义上就是第一个显著不同:数据类型在变量的后面

var number1 = 1  //声明变量并赋值
var number2 int = 1 //根据等号后面自动确定数据类型
number3 := 1 //更简洁常用的写法,类型名可以省略

1.2 基本数据类型

和其他语言中类似,包括空值nil;整数类型:int;浮点类型:float;字节类型:byte;字符串类型:string;布尔类型:boolean

  • 我们可以使用reflect.TypeOf(变量).Kind()确定变量类型
package main

import (
        "fmt"
        "reflect"
)
func main() {
        str1 :="Golang"
        str2 :="Go语言"
        fmt.Println(reflect.TypeOf(str2[2]).Kind())
        fmt.Println(str1[2], string(str1[2]))
        fmt.Println("%d %c\n", str2[2], string(str2[2]))
        fmt.Println("len(str2)", len(str2))
}

1.3 数组和切片(slice)

数组的声明和初始化如下:

var arr1 [2]int  
var arr2 [2][2]int  
arr3 := [3]int{1, 2, 3}

数据由于长度是固定的所以使用更多的是切片,切片声明需要指定三个参数:数据类型、长度、容量。并且切片可以通过调用append()实现切片的自动扩容;还可以切取部分片段,片段的区间[start, end)

slice := make([]int, 3, 5)  
print(slice)

1.4 字典

map类似于Java的hashmap,Python的地点dict,是一种存储键值对的数据结构

//声明
m1 := make(map[string]int)
//声明并初始化
m2 := map[string]string{
    "s1": "male",
    "s2": "female",
}
//赋值/修改
m1["s3"] = 18

1.5 指针

指针来表示地址,定义使用*,存在的变量通过&获取地址

number := "123"
var p *string = &number//表示p是指向number的指针
*p = "456"//修改
fmt.Println(number) //456

试着分析一下下面代码两个输出结果分别是什么?

package main  
  
import (  
    "fmt"  
)  
  
func add(num int) {  
    num += 1  
}  
  
func realadd(num *int) {  
    *num += 1  
}  
  
func main() {  
    num := 100  
    add(num)  
    fmt.Println(num) //?

    realadd(&num)  
    fmt.Println(num) //?
}

2. 条件控制

2.1 if else

和以前学的还是非常类似的,更简洁了一点

package main  
  
import "fmt"  
  
func main() {  
    age := 18  
    if age <= 18 {  
        fmt.Print("go home, do homework")  
    } else {  
        fmt.Printf("still go home, but go to bed")  
    }  
}

2.2 switch

Go中switch不需要使用break,因为一旦匹配到结果就会退出;如果需要继续匹配需要使用fallthrough

package main  
  
import "fmt"  
  
func main() {  
    age := 16  
    switch age {  
    case 10:  
        fmt.Printf("sleep more")  
    case 16:  
        fmt.Printf("day day up")  
        fallthrough  
    case 18:  
        fmt.Printf("...")  
    }  
}

2.3 for

使用range来完成遍历

nums := []int{10, 20, 30, 40} 
for i, num := range nums { 
    fmt.Println(i, num) 
} 
//0 10
//1 20 
//2 30 
//3 40

3. 高质量编程

学习了一些Go的基础语法,相信大家已经迫不及待想要在IDE中施展拳脚了,但是在这之前还是想介绍一些基本的编程规范知识,帮助大家在一开始就养成良好的代码风格和意识! 高质量代码其含义就是代码能够正确可靠并且清晰的实现目标的代码。在编写过程中我们应该反问自己一些问题:

  1. 各种边界情况是否考虑完善了?
  2. 异常是否正确处理了?
  3. 写的代码别人能否读懂并且维护? ... 代码编写过程中有三个原则:简单性、可读性、生产性

a. 代码格式

在代码格式方面建议使用gofmt自动格式化代码,统一风格。

b. 注释

除了代码格式以外注释是工作中不可忽略的存在,代码添加注释应该起到什么作用:

  • 注释代码
  • 解释代码
  • 解释错误情况
  • 解释代码实现想法

c. 命名规范

  • 变量

    • 变量应该尽量简洁
    • 变量缩略词全大写,当其位于变量开头且不需要导出的时候,使用全小写
    • 变量距离被使用越远,需要携带越多的上下文信息
  • 函数

    • 不携带包名的上下文信息
    • 当名为foo的包某个函数返回类型Foo时,可以省略类型信息
    • 只有小写字母组成,不包含大写字母和下划线
    • 简短并包含一定的上下文信息
    • 不与标准库同名

参考资料:

[1]7天用Go从零实现RPC框架GeeRPC | 极客兔兔 (geektutu.com)

[2]高质量编程简介及编码规范 - 掘金 (juejin.cn)