Go 语言入门指南 | 青训营

97 阅读4分钟

今天是第一天正式学习go语言,感觉go语言有着C/c++一样的代码既视感,也有着像python一样众多的“库”,之前写过一些C/C++代码的上手应该会很快。

本堂课重点内容

个人感觉,本节课的重点应该是Go 语言基础语言详细讲解的部分以及三个go语言的实战项目,对于一门没有接触过的语言来说,将其与之前学过的东西联系起来,力求达到触类旁通的效果,同时用一些有趣的项目对新学的一些知识进行巩固拓展,才是快速而又快乐的学习方式。

详细知识点介绍

由于我此前已经配置好go语言的开发环境,所以此处不再赘述相关的操作

1.变量

变量声明

(go中的变量声明后必须使用)

1.var name string
2.批量声明
var(
    name string,
    age int,
)

变量的初始化(3种)

(整形和浮点型变量的默认值**0 。字符串变量的默认值为空字符串 "" 。布尔型变量默认为false 。切片,函数,指针变量的默认值为nil**)

go
复制代码
1.var name string = "小明"
  var num1,num2 int = 1,2
2.var name = "小明" //类型推导
3.name:="小明" //短变量声明初始化不能用作全局变量

匿名变量

(如果我们接受到多个变量,有一些变量使用不到,可以使用下划线 "_``" 表示变量名称,这种变量叫做匿名变量。)例如

func main{
    name,_:=getNameAndAge()
    fmt.Printf("name:%v\n",name)
}
func getNameAndAge()(string,int){
    return "小明",20
}

2.常量

常量使用const定义声明

1.const PI = 3.14//类型推导
​
2.const{
    PI=3.14,
    KR=1
}

3.go的数据类型

注意:

1.string类型和int类型的变量不能用Println去拼接Println只能拼接同类型

2.基本数据类型和数组都是值类型(值传递,改变副本不影响本身的值)

3.引用类型(地址传递,改变副本影响本身的值):切片,map,指针,结构体,接口, channel

  1. 布尔:bool
  2. 数字:int int32 int64 float32 float64
  3. 字符:string(utf-8代码)
  4. 派生:指针 数组 切片 map 结构体 接口 管道

4.go的语言运算符

基本运算符

+ - * / ++(后自增) --(后自减)
++ -- 在go种只能单独使用

赋值运算符

ini
复制代码
+ += -= * *= / /=

关系运算符

复制代码
== > >= < <= !=

逻辑运算符

css
复制代码
"&&"与 "||"或 "!"非
|| 如果ab有一个为真,则结果为真,二者都为假,结果为假
&& 如果ab有一个为假,则结果为假,二者都为真,结果为真

注意:1.单目运算符是只有一个变量的 双目运算符是只有2个变量

2.Println是开发种常用 PrintfPrint是调试中常用

5.go语言的if else switch for for range语句

if


1.if 判断条件{
代码块
}
2.if 判断条件{
    代码块
}else if 判断条件{
    代码块
}else{
    代码块
}
3.if flag:=true;判断条件{
    //这里的flag只属于这一个if语句里面的 如果上面有一样的flag那么上面的那个不在这个if语句里起作用只有这个if里的起作用
    //如果if里和其他地方都有相同的变量 那么if里的变量只在if里起作用 其他地方的变量不在if里起作用 同时这个变量也不影响其他地方的变量
    代码块
}else{
    代码块
}

for

1.for 初始化变量;判断条件;修正变量{
    代码块
}
2.for{代码块}//循环

for range 循环

for rang遍历数组,切片,字符串,map以及通道(channel)。通过for range遍历的返回值有以下规律:

1.数组,切片,字符串返回索引(index)和值(value)

2.map返回键(key)和值(value)

3.通道(channel)只返回通道内的值(value)

//遍历数组
func main(){
    var a = [...]int{1, 2, 3}
    for i, v := range a {//rang后是要遍历的数组或者切片或者通道
        fmt.Printf("索引:%v,值:%v", i, v)//如果不想要索引或者键 可以把i/k 换成_
    }
}
//遍历切片
    func main(){
        var s = []int{1, 2, 3}
        for i, v := range s {
        fmt.Printf("索引:%v 值:%v", i, v)
    }
}
//遍历map
func main(){
    m := make(map[string]string, 0)//k的类型 v的类型 map的容量
    m["姓名"] = "小明"
    m["年龄"] = "20"
    m["邮箱"] = "qi1029817@163.com"
    for k, v := range m {
        fmt.Printf("%v:%v", k, v)
    }
}

switch相关

go语言中的switch语句,可以非常容易判断多个值的情况

csharp
复制代码
模板:
switch var{
    case val1:
    ...
    case val2:
    ...
    case val3:
    ...
    default:
    ...
}

switch

func main(){
    num := 1
    switch num {
    case 1:
        fmt.Println("是1")
    case 2:
        fmt.Println("是2")
    case 3:
        fmt.Println("是3")
    default:
        fmt.Println("什么都不是")
    }
}

image.png 同时跟着老师简单实现了一个带有auth的socket5服务器,对于socket5原理的理解更加深刻,这种能够get到新知识的感觉非常nice。

课后个人总结

第一天正式学习go语言,在一些基础的语法和写法的理解方面出现了一些错误,今后还要勤加练习。