一、流程控制 // 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)}
}
三、函數 左函數右返回值中間若干傳入參數 *傳指針的值,&指針的地址 函數是一等公民,也可以作為值、類型
3.1 函數傳值與傳指針 // 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 匿名函數 函數作為具體的類型;變量指向具體的函數
/ 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 函數中傳入切片參數 // fun_2
package mainimport ("fmt"
)
//求和函數,傳入一個動態整型數組
func getSum(num []int) int {//初始化sum變量sum := 0//遍歷數組,求和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函數 defer延遲的意思;后進先去 加入defer 的代碼語句將會最后執行,同時也能保存defer后面的代碼能夠執行到 場景1:資源關閉
// defer.go
package mainimport ("fmt"
)func main() {for i := 1; i <= 5; i++ {defer fmt.Println(i)}
}
3.5 pannic Go的異常處理機制 Panic 捕獲異常,程序掛
// panic.go
package mainimport ("fmt"
)func main() {defer func() {fmt.Println("After panic from defer !") //panic之后 defer里面的依然可以得到執行}()panic("I am panicing!")fmt.Println("After panic!") //panic后面得不到執行
}
四、結構體struct Go語言沒有private、protected、public這樣的關鍵字。
某個符號對其他包(package)可見(即可以訪問), 需要將該符號定義為以大寫字母開頭。
// 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)
}
五、面向對象 類與方法 Golang:"A method is a function with an implicit first argument, called a receiver.“ func (r ReceiverType) funcName(parameters) (results) 類型和作用在它上面定義的方法必須在同一個包里定義,這就是為什么不能在 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
}*///定義一個結構體Point
type Point struct {px float32py float32
}//接收者point,接收類型結構體指針Point,方法setXY(),傳入參數px,py
func (point *Point) setXY(px, py float32) {//定義接收者屬性point.px = pxpoint.py = py
}//接收者point 接收類型結構體指針Point,方法getxy(),返回兩個float32數據類型的值
func (point *Point) getXY() (float32, float32) {//返回x,y值return point.px, point.py
}//定義一個結構體 Integer
type Integer struct {//定義結構體的屬性value int
}func main() {//初始化一個類point := new(Point)point.setXY(1.23, 4.56)px, py := point.getXY()fmt.Print(px, py)
}
5.1 面向對象之繼承、接口、接口賦值、any類型、類型查詢 在Go語言中,一個類只需要實現了接口要求的所有函數,我們就說這個類實現了該接口。 接口賦值有兩種方式:1、將對象實例賦值給接口;2、將一個接口賦值給另一個接口 Go語言中任何對象實例都滿足空接口interface{},interface{}可以接收所有數據類型
package mainimport "fmt"//定義一個Person結構體
type Person struct {name stringage int
}//接收者person,接收結構體類型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
}//定義一個Animal接口,實現的方法有Fly() Run()
type Animal interface {Fly()Run()
}type Animal2 interface {Fly()
}type Bird struct {
}//通過接收者實現接口的方法
//接收者bird實現Fly()方法
func (bird Bird) Fly() {fmt.Println("Bird is flying!!!!")
}//接收者bird實現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//初始化一個對象birdbird := new(Bird)//將對象實例bird賦值給animal接口animal = bird//將animal接口賦值給animal2接口animal2 = animal////animal = bird //把類實例直接賦值給接口//animal2 = birdanimal2.Fly()animal2.Fly()animal.Fly()animal.Run()//定義一個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")}
}
轉載于:https://blog.51cto.com/huwho/2316356
總結
以上是生活随笔 為你收集整理的go语言初体验(流程控制、range遍历、函数、结构体、面向对象) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。