内容简介:左函数右返回值中间若干传入参数*传指针的值,&指针的地址函数是一等公民,也可以作为值、类型
一、流程控制
// main
package main
import (
"fmt"
)
func main() {
x := 2
switch x {
case 1:
fmt.Print("beifeng 1")
case 2:
fallthrough
case 3:
fmt.Print("beifeng 2")
default:
fmt.Print("beifeng 3")
}
}
二、range遍历
// main.go
package main
import (
"fmt"
)
func main() {
x := "zhangsan"
for _, v := range x {
fmt.Printf("%c\n", v)
}
}
三、函数
左函数右返回值中间若干传入参数
*传指针的值,&指针的地址
函数是一等公民,也可以作为值、类型
3.1 函数传值与传指针
// func_1
package main
import (
"fmt"
)
func swap(a, b int) (int, int) {
return b, a
}
func add(a *int) *int {
*a = *a + 1
return a
}
func main() {
a := 1
add(&a)
fmt.Printf("%d", a)
}
3.2 匿名函数
函数作为具体的类型;变量指向具体的函数
/ main.go
package main
import (
"fmt"
)
func main() {
type sum func(x, y int) int
var f sum = func(x, y int) int {
return x + y
}
fmt.Println(f(3, 4))
}
3.3 函数中传入切片参数
// fun_2
package main
import (
"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 main
import (
"fmt"
)
func main() {
for i := 1; i <= 5; i++ {
defer fmt.Println(i)
}
}
3.5 pannic
Go的异常处理机制
Panic 捕获异常,程序挂
// panic.go
package main
import (
"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 main
import (
"fmt"
)
type Person struct {
name string
age int
}
type Student struct {
Person
age int
speciality 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 main
import (
"fmt"
)
/*func compare(a, b int) bool {
return a < b
}*/
//定义一个结构体Point
type Point struct {
px float32
py float32
}
//接收者point,接收类型结构体指针Point,方法setXY(),传入参数px,py
func (point *Point) setXY(px, py float32) {
//定义接收者属性
point.px = px
point.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 main
import "fmt"
//定义一个Person结构体
type Person struct {
name string
age int
}
//接收者person,接收结构体类型Person, 方法getNameAndAge() 返回string,int值
func (person Person) getNameAndAge() (string, int) {
return person.name, person.age
}
type Student struct {
Person
speciality 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 = 26
name, age := student.getNameAndAge()
student.speciality = "computer"
speciality := student.getSpeciality()
fmt.Println(name, age, speciality)
//定义animal接口
var animal Animal
//定义animal2接口
var animal2 Animal2
//初始化一个对象bird
bird := new(Bird)
//将对象实例bird赋值给animal接口
animal = bird
//将animal接口赋值给animal2接口
animal2 = animal
//
//animal = bird //把类实例直接赋值给接口
//animal2 = bird
animal2.Fly()
animal2.Fly()
animal.Fly()
animal.Run()
//定义一个any类型的变量v1
var 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")
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Go 语言函数式编程系列(十二) —— 数据类型篇:字典类型的遍历与排序
- Go 语言函数式编程系列教程(九) —— 数据类型篇:数组切片的创建和遍历
- 数组常见的遍历循环方法、数组的循环遍历的效率对比
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除
- Js遍历数组总结
- 遍历
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Trading and Exchanges
Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00
This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!