青训营后端Go语言基础(一) | 豆包MarsCode AI 刷题

36 阅读4分钟

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

赋值运算符

+ += -= * *= / /=

关系运算符

== > >= < <= !=

逻辑运算符

// "&&"与 "||"或 "!"非
// || 如果a和b有一个为真,则结果为真,二者都为假,结果为假
// && 如果a和b有一个为假,则结果为假,二者都为真,结果为真

注意: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 v1:
    ...
    case v2:
    ...
    case v3:
    ...
    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("Nothing")
    }
}
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("Nothing")
    }
}
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("Nothing")
    }
}
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("Nothing")
    }
}//输出结果是5,6

注意事项:

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

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