GO基础知识分享2 | GO主题月

简介: [TOC]兵长:胖sir,咋还在看基础知识嘞?你以前可不是这样的哦胖sir:切,我今天看的和之前的可不一样兵长:有啥不一样的,你能给我说出花来嘛胖sir:小样,你自己好好看看兵长:看看就看看

[TOC]

兵长:胖sir,咋还在看基础知识嘞?你以前可不是这样的哦

胖sir:切,我今天看的和之前的可不一样

兵长:有啥不一样的,你能给我说出花来嘛

胖sir:小样,你自己好好看看

兵长:看看就看看

GO基础知识分享2

1、 多重赋值

交换2个数字的值

i := 10
j := 20
i , j = j, i

2、复数

t := 3 + 5i
fmt.Println(t) //(3+5i)
fmt.Printf("type == %T", t)//type == complex128

3、输入

    var tmp int
    fmt.Scanf("%d", &tmp)
    fmt.Println("tmp == ", tmp)  //tmp ==  1
    var tmp2 int
    fmt.Scan(&tmp2)
    fmt.Printf("type == %T", tmp2)//type == int

4、类型转换

bool类型不能与int类型互相转化

5、type  自定义类型

    type long int64
    var a long
    a = 2
    fmt.Printf("type == %T", a)  //type == main.long

6、switch

case后面不需要写break; 默认就有该功能

     num := 2
    switch num {
    case 1:
        fmt.Println("111")
    case 2:
        fmt.Println("222") //222
    case 3:
        fmt.Println("333")
    case 4:
        fmt.Println("4444")
    }

fallthrough -- 不跳出switch语句,后面无条件执行

    num := 2
    switch num {
    case 1:
        fmt.Println("111")
    case 2:
        fmt.Println("222") //222
        fallthrough
    case 3:
        fmt.Println("333") // 333
    case 4:
        fmt.Println("4444")
    }

switch 后面可以不用写 条件,case 后面可以写条件

    score := 90
    switch {  //这里可以不用写 条件
    case score > 90:  //case 后面可以写条件
        fmt.Println("extent")
    case score > 80:
        fmt.Println("good")
    case score > 70:
        fmt.Println("not bad")
    }

7、goto 的写法和功能与C语言保持一致

8、golang函数名字首字母小写,为私有,大写为公有

9、不定参数类型和传递

func getname(args ...string) {
    length := len(args)
    if length > 0 {
        for i, data := range args {
            fmt.Printf("%d -- %s\n", i, data)
        }
    }
}
func test(args ...string) {
    getname(args[1:]...)  //只传递不定参数中的其中几个
}
func main() {
    test("qqq", "yyy", "bbb")
    //0 -- yyy
    //1 -- bbb
}

10、函数类型

可以设置函数类型

func Add(a, b int) int {
    return a + b
}
type Universal func(int, int) int
func main() {
    var uni Universal
    uni = Add
    res := uni(1, 2)
    fmt.Println(res)
}

11 、回调函数

通过回调函数实现多态

func Add(a, b int) int {
    return a + b
}
type Universal func(int, int) int
func cal(uni Universal, a int, b int) int {
    return uni(a, b)
}
func main() {
    uni := Add
    res := cal(uni, 1, 2)
    fmt.Println(res)
}

12、匿名函数和闭包

golang中,所有的匿名函数都是闭包

1、匿名函数

2、定义匿名函数的时候直接调用

3、定义匿名函数有参数有返回值

    name := "qqq"
    age := 24
    //1、匿名函数
    f1 := func() {
        fmt.Printf("name == %s\n", name)
        fmt.Printf("age == %d\n", age)
    }
    f1()
    //2、定义匿名函数的时候直接调用
    func(hobby string) {
        fmt.Println(name)
        fmt.Println(hobby)
    }("basketball")
    //3、定义匿名函数有参数有返回值
    f3 := func(a, b int) int {
        return a + b
    }
    fmt.Println(f3(1, 3))
    res := func(a, b int) int {
        return a + b
    }(3, 8)
    fmt.Println(res)

闭包的特点

1、闭包的特点1,可以捕获变量,且是以引用的方式捕获的

2、必要的特点2 ,闭包里面使用的变量,只要闭包还在使用,则一直有效,哪怕超出该变量的作用域

func cal() func() int {
    var x int
    return func() int {
        x++
        return x * x
    }
}
func main() {
    //1、闭包的特点1,可以捕获变量,且是以引用的方式捕获的
    a := 1
    name := "go"
    func() {
        a = 2
        name = "hello wrold"
        fmt.Printf("内部  : a == %d, name == %s\n", a, name)
    }()
    fmt.Printf("外部  : a == %d, name == %s\n", a, name)
    //2、必要的特点2 ,闭包里面使用的变量,只要闭包还在使用,则一直有效,哪怕超出该变量的作用域
    f := cal()
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())
}

13、defer

defer的使用

使用方式类似于栈,先进后出

//延迟调用,main函数结束前进行调用
    fmt.Println("hello")
    defer fmt.Println("over!!")
    fmt.Println("world")
    //hello
    //world 
    //over!!
    //多个defer的执行顺序,类似于栈的方式,先进后出,哪怕中间出现程序错误,defer修饰的语句仍然会执行
    for i := 0; i < 10; i++ {
        defer fmt.Println(i)
    }
    --------------------------------------------
    defer fmt.Println("aaaa")
    defer fmt.Println("bbb")
    defer fmt.Println("ccc")
// ccc
// bbb
// aaaa

   

defer 和匿名函数的使用

// a := 10
    // b := 20
    // defer func() {
    //  fmt.Printf("inner  a == %d, b == %d\n", a, b)
    // }()
    // a = 1
    // b = 2
    // fmt.Printf("externer  a == %d, b == %d\n", a, b)
// externer  a == 1, b == 2
// inner  a == 1, b == 2
    a := 10
    b := 20
    defer func(a, b int) {
        fmt.Printf("inner  a == %d, b == %d\n", a, b)
    }(a, b) //此处参数 a=10 b=20的参与已经传入到函数中了,只是匿名函数最后执行而已
    a = 1
    b = 2
    fmt.Printf("externer  a == %d, b == %d\n", a, b)
// externer  a == 1, b == 2
// inner  a == 10, b == 20

14、init函数

每一个包 默认都会有一个init函数,也可以自己写一个init函数

每调用一个包,程序会先执行这个包的init函数

image.png

main.go

package main
import (
    "fmt"
    "hhh/test"
)
var a int = 10
func init() {
    fmt.Println("this is main init")
}
func main() {
    a := "xiaozhu"
    fmt.Println(a)
    {
        a := 1.4
        fmt.Println(a)
    }
    test.Pr()
}

test.go

package test
import "fmt"
func init() {
    fmt.Println("test init")
}
func Pr() {
    fmt.Println("hello wrold")
}

15、字符串处理涉及的函数

www.zzvips.com/article/610…

16、值类型的变量,存在栈中,引用类型的变量,存在堆中

  • 值类型:基本数据类型int、float、bool、string以及数组和struct
  • 引用类型:指针、slice、map、chan等都是引用类型

以上为本期全部内容,如有疑问可以在评论区或后台提出你的疑问,我们一起交流,一起成长。

好家伙要是文章对你还有点作用的话,请帮忙点个关注,分享到你的朋友圈,分享技术,分享快乐

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关文章
|
Go C语言
GO基础知识分享2
GO基础知识分享2
|
小程序 Java Go
100天精通Golang(基础入门篇)——第14天:深入解析Go语言函数->从概念到实践,助您精通基础知识!(基础)
100天精通Golang(基础入门篇)——第14天:深入解析Go语言函数->从概念到实践,助您精通基础知识!(基础)
70 0
|
Go Cloud Native
为什么要写技术文章 | GO主题月
这个问题对于每一个人来说各有各的原因。有的为了写作变现,有的为了自己的兴趣,写小说,写文章,写书。
为什么要写技术文章 | GO主题月
|
网络安全 Go Cloud Native
SSH连接服务器后执行多条命令 |Go主题月
大家平时有没有遇到自己连接云服务器,ssh 连接上去之后,发现自己的一些小工具用不了 例如go build无法使用 ,由于我们安装配置golang 环境的时候,是在文件/etc/profile中写了配置,因此需要source 一下/etc/profile
169 0
SSH连接服务器后执行多条命令 |Go主题月
|
存储 算法 Java
Go入门篇:(二)基础知识之结构,包,变量初探
Go入门篇:(二)基础知识之结构,包,变量初探
78 0
|
存储 JSON Go
|
存储 安全 编译器
|
移动开发 算法 编译器
OAUTH之钉钉第三方授权 | GO主题月
hello,我是小魔童哪吒,欢迎点击关注,有更新,将第一时间呈现到你的面前 胖sir:小魔童,我今天收到了一个需求,期望我们做一个第三方登录的功能,用户可以通过第三方授权来登录我们的web
324 0
|
Linux Go Windows
|
Go Windows Cloud Native
5个步骤搞定protoc环境安装 | GO主题月
[TOC] 胖sir:不知道你有没有这样的疑惑,工作中发现很多新接触GO的小伙伴安装protoc的环境需要折腾很久,刚才开我装环境的时候也是花了好长时间,最后如何装好的也不知原因,网上查找了各种资源,也没有一篇文章可以很好的解决这个问题.
1635 0