[TOC]
兵長:胖sir,咋還在看基礎知識嘞?你以前可不是這樣的哦
胖sir:切,我今天看的和之前的可不一樣
兵長:有啥不一樣的,你能給我說出花來嘛
胖sir:小樣,你自己好好看看
兵長:看看就看看
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函式
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/61040.html
16、值型別的變數,存在棧中,引用型別的變數,存在堆中
- 值型別:基本資料型別int、float、bool、string以及陣列和struct
- 引用型別:指標、slice、map、chan等都是引用型別
以上為本期全部內容,如有疑問可以在評論區或後臺提出你的疑問,我們一起交流,一起成長。
好傢伙要是文章對你還有點作用的話,請幫忙點個關注,分享到你的朋友圈,分享技術,分享快樂
技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
作者:小魔童哪吒
本作品採用《CC 協議》,轉載必須註明作者和本文連結