一、流程控制
// mainpackage mainimport ("fmt")func main() { x :=2switchx {case1: fmt.Print("beifeng 1")case2: fallthroughcase3: fmt.Print("beifeng 2")default: fmt.Print("beifeng 3") }}
二、range遍历
// main.gopackagemainimport("fmt")funcmain(){ x :="zhangsan"for_, v := range x { fmt.Printf("%c\n", v) }}
三、函数
左函数右返回值中间若干传入参数
*传指针的值,&指针的地址
函数是一等公民,也可以作为值、类型
3.1 函数传值与传指针
// func_1package mainimport("fmt")funcswap(a, bint) (int,int){returnb, a}funcadd(a *int) *int{ *a = *a +1returna}funcmain(){ a :=1add(&a) fmt.Printf("%d", a)}
3.2 匿名函数
函数作为具体的类型;变量指向具体的函数
/ main.gopackage mainimport("fmt")funcmain(){type sumfunc(x, yint)intvarf sum= func(x, yint)int{returnx + y } fmt.Println(f(3,4))}
3.3 函数中传入切片参数
// fun_2packagemainimport("fmt")//求和函数,传入一个动态整型数组funcgetSum(num []int)int{//初始化sum变量sum :=0//遍历数组,求和fori :=0; i < len(num); i++ { sum += num[i] }//返回sum值returnsum}funcmain(){//初始化num整型切片变量num := []int{1,2,3,4,5} fmt.Print(getSum(num))}
3.4 defer函数
defer延迟的意思;后进先去
加入defer 的代码语句将会最后执行,同时也能保存defer后面的代码能够执行到
场景1:资源关闭
// defer.gopackagemainimport("fmt")funcmain(){fori :=1; i <=5; i++ { defer fmt.Println(i) }}
3.5 pannic
Go的异常处理机制
Panic 捕获异常,程序挂
// panic.gopackagemainimport("fmt")funcmain(){deferfunc(){ fmt.Println("After panic from defer !")//panic之后 defer里面的依然可以得到执行}() panic("I am panicing!") fmt.Println("After panic!")//panic后面得不到执行}
四、结构体struct
Go语言没有private、protected、public这样的关键字。
某个符号对其他包(package)可见(即可以访问),
需要将该符号定义为以大写字母开头。 APP定制开发找上海捌跃网络科技有限公司
// main.gopackage mainimport("fmt")type Person struct{ namestringageint}type Studentstruct{Person ageintspecialitystring}funcmain(){ 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{}
// mainpackage mainimport("fmt")/*func compare(a, b int) bool {
return a < b
}*///定义一个结构体Pointtype Pointstruct{ px float32 py float32}//接收者point,接收类型结构体指针Point,方法setXY(),传入参数px,pyfunc (point *Point) setXY(px, py float32) {//定义接收者属性point.px = px point.py = py}//接收者point 接收类型结构体指针Point,方法getxy(),返回两个float32数据类型的值func (point *Point) getXY() (float32, float32) {//返回x,y值returnpoint.px, point.py}//定义一个结构体 Integertype Integerstruct{//定义结构体的属性valueint}funcmain(){//初始化一个类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 Personstruct{ namestringageint}//接收者person,接收结构体类型Person, 方法getNameAndAge() 返回string,int值func (person Person) getNameAndAge() (string,int) {returnperson.name, person.age}type Studentstruct{ Person specialitystring}func (student Student) getSpeciality()string{returnstudent.speciality}//定义一个Animal接口,实现的方法有Fly() Run()type Animalinterface{ Fly() Run()}type Animal2interface{ Fly()}type Birdstruct{}//通过接收者实现接口的方法//接收者bird实现Fly()方法func (bird Bird) Fly() { fmt.Println("Bird is flying!!!!")}//接收者bird实现Run()方法func (bird Bird) Run() { fmt.Println("Bird is running!!!!")}funcmain(){ student :=new(Student) student.name ="zhangsan"student.age =26name, age := student.getNameAndAge() student.speciality ="computer"speciality := student.getSpeciality() fmt.Println(name, age, speciality)//定义animal接口varanimal Animal//定义animal2接口varanimal2 Animal2//初始化一个对象birdbird :=new(Bird)//将对象实例bird赋值给animal接口animal = bird//将animal接口赋值给animal2接口animal2 = animal////animal = bird //把类实例直接赋值给接口//animal2 = birdanimal2.Fly() animal2.Fly() animal.Fly() animal.Run()//定义一个any类型的变量v1varv1interface{}//赋值v1 ="zhangsan"switchv1.(type) {caseint:casefloat32:casefloat64: fmt.Println("this is float64")casestring: fmt.Println("this is string") }}
转自:http://blog.51cto.com/huwho/2316356
有疑问加站长微信联系(非本文作者)