可以在变量前加入"&",符号,这样就会变成该变量的内存地址
使用"*",可以接受内存地址,详细代码如下:

func main(){
 fmt.Println(&name)
  namesty(&name)
  print(name)
 }

func namesty(name *string)  {
    //使用指针用内存地址更换变量名称
    *name="code"
}

使用*接受了内存地址之后就可以从内存地址改变这个变量,于是下面的print输出语句可以发现name的值变成了code。


switch可以使用case判断值,当值没有赋予时可以编程一个表达式,如:

    a:=10
    switch  {
    case a>5:
         println("他是真的哦")
        break
    default:
        println("sdgdg")
    }

当switch 变成了switch a是,就只能判断数字了,因为类型冲突了

控制流的代码时没有(),包括循环的,if都只能写成

    if name!="you names"{
        println(name)
    }

的形式,所幸的是有大括号且大括号不可以换行


循环:

    for i:=1;i<=10;i++{
        fmt.Println(i)
    }

可以发现还是没有()的符号,而且当你想要死循环的时候可以

for{
}

跳出当然还是用break


defer延迟函数,只有当剩下的全部执行完时才会执行包括了defer的哪一行语句
而且你会发现一个情况,当有两个defer函数时,他会下执行最下面然后再执行上面一边,也就意味着当有defer函数时,自动将defer写进了最后面,而defer后面一行的defer时比上面的defer先执行的。
defer会直接将他后面的代码写进他的前面!!!

    for i:=1;i<=10;i++{
        defer fmt.Println(-i)
        defer fmt.Println(&i)
        fmt.Println(i)
    }

panic强制停止当前的控制流!!!

if i>5{
panic("namesdgdfgdfg")
}

会中断当前函数的执行,倘若有defer任然会正常执行defer的代码。


recover函数可以强制获取当前的控制权,但是当没有问题时recover只会返回nil


go的映射是一个哈希表,使用map关键字
例如:

stet:=map[string]int{
        "name":10,
        "code":15,
    }
    fmt.Println(stet)

可以发现他利用map关键字定义了一给类型为string的键值,而后使用int表示他对应的值时int形式。
还可以使用stet["names"]=10来增加
stet["name"],用来获取到name为主键后面的值
还可以使用delete(stet,"code")来删除掉stet映射的code键值。


结构

type namest struct {
        name string
        code string
        a int
    }

当你向namest变量类型赋值3时,

emb:=namest{"12","sdf",10}

获取的话则是

fmt.Println(emb.name)

你可以把它看做一个接口类。
也可以嵌入元素。

    type namests7 struct {
        namest
        mid int
    }
最后修改:2021 年 08 月 25 日
如果觉得我的文章对你有用,请随意赞赏