一、流程控制 // main
package mainimport ("fmt"
)func main() {x := 2switch x {case 1:fmt.Print("beifeng 1")case 2:fallthroughcase 3:fmt.Print("beifeng 2")default:fmt.Print("beifeng 3")}
}
二、range遍歷 // main.go
package mainimport ("fmt"
)func main() {x := "zhangsan"for _, v := range x {fmt.Printf("%c\n", v)}
}
三、函數(shù) 左函數(shù)右返回值中間若干傳入?yún)?shù) *傳指針的值,&指針的地址 函數(shù)是一等公民,也可以作為值、類型
3.1 函數(shù)傳值與傳指針 // func_1
package mainimport ("fmt"
)func swap(a, b int) (int, int) {return b, a
}func add(a *int) *int {*a = *a + 1return a
}func main() {a := 1add(&a)fmt.Printf("%d", a)
}
3.2 匿名函數(shù) 函數(shù)作為具體的類型;變量指向具體的函數(shù)
/ main.go
package mainimport ("fmt"
)func main() {type sum func(x, y int) intvar f sum = func(x, y int) int {return x + y}fmt.Println(f(3, 4))
}
3.3 函數(shù)中傳入切片參數(shù) // fun_2
package mainimport ("fmt"
)
//求和函數(shù),傳入一個(gè)動(dòng)態(tài)整型數(shù)組
func getSum(num []int) int {//初始化sum變量sum := 0//遍歷數(shù)組,求和for i := 0; i < len(num); i++ {sum += num[i]}//返回sum值return sum
}func main() {//初始化num整型切片變量num := []int{1, 2, 3, 4, 5}fmt.Print(getSum(num))
}
3.4 defer函數(shù) defer延遲的意思;后進(jìn)先去 加入defer 的代碼語(yǔ)句將會(huì)最后執(zhí)行,同時(shí)也能保存defer后面的代碼能夠執(zhí)行到 場(chǎng)景1:資源關(guān)閉
// defer.go
package mainimport ("fmt"
)func main() {for i := 1; i <= 5; i++ {defer fmt.Println(i)}
}
3.5 pannic Go的異常處理機(jī)制 Panic 捕獲異常,程序掛
// panic.go
package mainimport ("fmt"
)func main() {defer func() {fmt.Println("After panic from defer !") //panic之后 defer里面的依然可以得到執(zhí)行}()panic("I am panicing!")fmt.Println("After panic!") //panic后面得不到執(zhí)行
}
四、結(jié)構(gòu)體struct Go語(yǔ)言沒(méi)有private、protected、public這樣的關(guān)鍵字。
某個(gè)符號(hào)對(duì)其他包(package)可見(jiàn)(即可以訪問(wèn)), 需要將該符號(hào)定義為以大寫(xiě)字母開(kāi)頭。
// main.go
package mainimport ("fmt"
)type Person struct {name stringage int
}type Student struct {Personage intspeciality string
}func main() {student := Student{Person{"zhangsan", 25}, 30, "maths"}fmt.Printf("%v %v", student.Person.age, student.age)
}
五、面向?qū)ο?/h3> 類與方法 Golang:"A method is a function with an implicit first argument, called a receiver.“ func (r ReceiverType) funcName(parameters) (results) 類型和作用在它上面定義的方法必須在同一個(gè)包里定義,這就是為什么不能在 int、float 或類似這些的類型上定義方法。 類的初始化:point :=new(Point) point :=&Point{} point :=&Point{x:100, y:100} point := Point{}
// main
package mainimport ("fmt"
)/*func compare(a, b int) bool {return a < b
}*///定義一個(gè)結(jié)構(gòu)體Point
type Point struct {px float32py float32
}//接收者point,接收類型結(jié)構(gòu)體指針Point,方法setXY(),傳入?yún)?shù)px,py
func (point *Point) setXY(px, py float32) {//定義接收者屬性point.px = pxpoint.py = py
}//接收者point 接收類型結(jié)構(gòu)體指針Point,方法getxy(),返回兩個(gè)float32數(shù)據(jù)類型的值
func (point *Point) getXY() (float32, float32) {//返回x,y值return point.px, point.py
}//定義一個(gè)結(jié)構(gòu)體 Integer
type Integer struct {//定義結(jié)構(gòu)體的屬性value int
}func main() {//初始化一個(gè)類point := new(Point)point.setXY(1.23, 4.56)px, py := point.getXY()fmt.Print(px, py)
}
5.1 面向?qū)ο笾^承、接口、接口賦值、any類型、類型查詢 在Go語(yǔ)言中,一個(gè)類只需要實(shí)現(xiàn)了接口要求的所有函數(shù),我們就說(shuō)這個(gè)類實(shí)現(xiàn)了該接口。 接口賦值有兩種方式:1、將對(duì)象實(shí)例賦值給接口;2、將一個(gè)接口賦值給另一個(gè)接口 Go語(yǔ)言中任何對(duì)象實(shí)例都滿足空接口interface{},interface{}可以接收所有數(shù)據(jù)類型
package mainimport "fmt"//定義一個(gè)Person結(jié)構(gòu)體
type Person struct {name stringage int
}//接收者person,接收結(jié)構(gòu)體類型Person, 方法getNameAndAge() 返回string,int值
func (person Person) getNameAndAge() (string, int) {return person.name, person.age
}type Student struct {Personspeciality string
}func (student Student) getSpeciality() string {return student.speciality
}//定義一個(gè)Animal接口,實(shí)現(xiàn)的方法有Fly() Run()
type Animal interface {Fly()Run()
}type Animal2 interface {Fly()
}type Bird struct {
}//通過(guò)接收者實(shí)現(xiàn)接口的方法
//接收者bird實(shí)現(xiàn)Fly()方法
func (bird Bird) Fly() {fmt.Println("Bird is flying!!!!")
}//接收者bird實(shí)現(xiàn)Run()方法
func (bird Bird) Run() {fmt.Println("Bird is running!!!!")
}func main() {student := new(Student)student.name = "zhangsan"student.age = 26name, age := student.getNameAndAge()student.speciality = "computer"speciality := student.getSpeciality()fmt.Println(name, age, speciality)//定義animal接口var animal Animal//定義animal2接口var animal2 Animal2//初始化一個(gè)對(duì)象birdbird := new(Bird)//將對(duì)象實(shí)例bird賦值給animal接口animal = bird//將animal接口賦值給animal2接口animal2 = animal////animal = bird //把類實(shí)例直接賦值給接口//animal2 = birdanimal2.Fly()animal2.Fly()animal.Fly()animal.Run()//定義一個(gè)any類型的變量v1var v1 interface{}//賦值v1 = "zhangsan"switch v1.(type) {case int:case float32:case float64:fmt.Println("this is float64")case string:fmt.Println("this is string")}
}
轉(zhuǎn)載于:https://blog.51cto.com/huwho/2316356
總結(jié)
以上是生活随笔 為你收集整理的go语言初体验(流程控制、range遍历、函数、结构体、面向对象) 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。