[TOC]
兵长:胖sir,咋还在看基础知识嘞?你以前可不是这样的哦
胖sir:切,我明天看的和之前的可不一样
兵长:有啥不一样的,你能给我说出花来嘛
胖sir:小样,你本人好好看看
兵长:看看就看看
GO基础知识分享2
1、 多重赋值
替换2个数字的值
i := 10j := 20i , j = j, i
2、复数
t := 3 + 5ifmt.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) intfunc 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) intfunc 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函数
main.go
package mainimport ( "fmt" "hhh/test")var a int = 10func 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 testimport "fmt"func init() { fmt.Println("test init")}func Pr() { fmt.Println("hello wrold")}
15、字符串解决波及的函数
http://www.zzvips.com/article...
16、值类型的变量,存在栈中,援用类型的变量,存在堆中
- 值类型:根本数据类型int、float、bool、string以及数组和struct
- 援用类型:指针、slice、map、chan等都是援用类型
以上为本期全部内容,如有疑难能够在评论区或后盾提出你的疑难,咱们一起交换,一起成长。
好家伙要是文章对你还有点作用的话,请帮忙点个关注,分享到你的朋友圈,分享技术,分享高兴
技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。
作者:小魔童哪吒