一、流程控制

// 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遍历、函数、结构体、面向对象)相关推荐

  1. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别

    "我的Go+语言初体验" | 征文活动进行中- 我的Go+语言初体验--Go+语言构建神经网络实战手写数字识别 0. 前言 1. 神经网络相关概念 2. 构建神经网络实战手写数字识 ...

  2. 我的Go+语言初体验——(4)零基础学习 Go+ 爬虫

    我的Go+语言初体验--(4)零基础学习 Go+ 爬虫 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言非常适合编写爬虫程序,具有并发机制完善.并发数量大.占用资源少. ...

  3. 我的Go+语言初体验——10秒真男人游戏

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] git地址:[网不行, ...

  4. 我的Go+语言初体验--Go+之环境安装与程序编码初体验

    一.Go+ 简介 对于 Go+ 工程而言: Go+ 将支持所有 Go 功能(包括部分支持 cgo): Go+ 提供了更简单优雅的语法,比 Go 更接近自然语言: Go+ 易于学习,不必在一开始就处理工 ...

  5. 我的Go+语言初体验——go【Format】goplus

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 前言: goplus的 ...

  6. 我的Go+语言初体验——【四、版本更新环境变量配置】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 目录 拉取最新包[gi ...

  7. 我的Go+语言初体验——【三、spx案例测试_许式伟先生推荐补充(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[我的G ...

  8. 我的Go+语言初体验——【三、spx案例测试(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[我的G ...

  9. 我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[htt ...

  10. 我的Go+语言初体验——ubuntu安装Go+环境问题锦集(二)

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 本文为大家带来[Go+ ...

最新文章

  1. java 1.7 事件监听_17.7Listener监听器
  2. ovs router
  3. WIN10 关闭驱动签名
  4. iphone同步助手_iPhone怎么批量删除联系人?
  5. gwt格式_GWT的渐进式Web应用程序配方
  6. session和cookie的最深刻理解
  7. 快速设置XMind中的设置联系
  8. mac下workbench轻松搭建(drools 7.11.0.Final版本)
  9. 没有任何一个行业是没有竞争的
  10. 数学建模美赛该如何准备?
  11. 解析VPU:智能视频处理加速器
  12. MatConvNet训练自己的网络
  13. ZigBee模块无线通信组网结构技术之Mesh拓扑网状
  14. python 网络编程 day02
  15. 达梦数据库在ZYJ环境上通过RPM打包注册服务的步骤
  16. iOS登录注册登录界面(UITextField)
  17. C 生化危机 SDUT
  18. 网络上的计算机无权限访问权限,电脑连不上网,提示无网络访问权限怎么办?...
  19. 【Python】【小明爬楼梯】
  20. android微信怎么建群,微信群空间是什么?如何创建微信群空间?

热门文章

  1. zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法
  2. ajax 请求超过了5s 还没有返回 的话 就自动取消
  3. iOS 加密的3种方法
  4. HTTPS_SSL配置的步骤以及原理说明
  5. 基于蚁群算法的岸桥作业顺序研究
  6. AOP实现Android集中式登录架构
  7. IntelliJ IDEA快捷键总结
  8. Interface Builder nib2objc ibtool
  9. 云供应商安全评估:小心落入陷阱
  10. Servlet登陆功能的实现