go基础知识(一)|青训营笔记

157 阅读2分钟

go语言基础(一)

1.变量

变量声明

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

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

变量的初始化(3种)

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

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种只能单独使用

赋值运算符

+ += -= * *= / /=

关系运算符

== > >= < <= !=

逻辑运算符

"&&"与 "||"或 "!"非
|| 如果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语句,可以非常容易判断多个值的情况

模板:
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("什么都不是")
    }
}

switch多条件匹配

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

switch之``case可以是条件表达式

func main(){
num := 5
    switch {//如果case是条件表达式那么switch后没有表达式
    case num >= 5:
        fmt.Println("是5")
    case num > 6:
        fmt.Println("是6")
    case num > 7:
        fmt.Println("是7")
    default:
        fmt.Println("什么都不是")
    }
}

switchfallthrough可以执行满足条件的下一个case

func main(){
num := 8
    switch {
    case num >= 5:
        fmt.Println("是5")
        fallthrough
    case num > 6:
        fmt.Println("是6")
    case num > 7:
        fmt.Println("是7")
        break//fallthrough和break不能同时使用
    default:
        fmt.Println("什么都不是")
    }
}//输出结果是5,6

注意事项:

1.不同的case之间不适应break分隔,默认只会执行一个case

2.如果想要执行多个case,需要使用fallthrough关键字,不过还可以用break中断

目前是作为go初学者记录的第一部分笔记后续内容会每天发布希望有错误地方大家指出一起学习