面向对象有多态,golang也不能落后啊,哈哈.还是从C++的简单猫开始.
package main
import "fmt"
// 这个和其他语言的 interface (接口)一样一样的,也和php一样,
// 比如一定要实现interface的所有方法,才算实现这个 interface
// 这个interface一共有3个方法,要实现这个 interface,
type Animal interface {
Sleep()
Age() int
Type() string
}
type Cat struct {
MaxAge int
}
func (c *Cat) Sleep() {
fmt.Println("Cat need sleep")
}
func (c *Cat) Age() int {
return c.MaxAge
}
func (c *Cat) Type() string {
return "Cat"
}
//测试一下trait
type Trait struct {
Name string
}
type Dog struct {
MaxAge int
Trait
}
func (d *Dog) Sleep() {
fmt.Println("Dog need sleep")
}
func (d *Dog) Age() int {
return d.MaxAge
}
func (d *Dog) Type() string {
return "Dog"
}
//工厂
func Factory(name string) Animal {
switch name {
case "dog":
return &Dog{MaxAge: 20, Trait: Trait{"abt"}}
case "cat":
return &Cat{MaxAge: 10}
default:
panic("No such animal")
}
}
func testPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in testPanic", r)
}
}()
gPanic()
// 以下代码会被打印的
fmt.Println("execute in testPanic")
}
func gPanic() {
panic("panic from gPanic")
fmt.Println("recover from panic")
}
func main() {
//1、Defer类似Java中finally
//使用过程中,defer类似Java中finally,即使panic(即java中 throw exception),依然能够执行
//
//2、panic 只能在本 goroutine 处理
//若尝试在main中recover goroutine中panic,将无法达到预期,程序仍然会结束,所以不会执行 a.Age()
//比较 testPanic 和 a.Age() 就可以看出来
//
//3、recover 只能在 defer 中有效
//golang的要求,recover只能写在defer中
//
//4、多使用recover除占用cpu外,不会影响服务正常
//如果函数没有 panic,调用 recover 函数不会获取到任何信息,也不会影响当前进程。
defer func() {
if r := recover(); r != nil {
fmt.Printf("捕获到的错误:%s\n", r)
}
}()
animal := Factory("dog")
animal.Sleep()
fmt.Printf("%s max age is: %d \n", animal.Type(), animal.Age())
// 这个可以恢复
testPanic()
// 以下代码会触发 panic.
a := Factory("tiger")
a.Age();
}
搜索
标签
study
ab
amap
apache
apahe
awk
aws
bat
centos
CFS
chrome
cmd
cnpm
composer
consul
crontab
css
curl
cygwin
devops
di
docker
docker,docker-compose
ethereum
excel
fiddler
fluentd
framework
front-end
git
gitgui
github
glide
go
golang
gorm
grafana
gzip
ioc
item2
iterm2
javascript
jenkins
jsonp
kafka
laradock
laravel
larval
linux
liunux
log
mac
mac, wi-fi
macos
magento
mariaDB
minikube
mongoDB
msp
mysql
netbeans
nginx
nodejs
nohup
npm
nsq
oracle
php
php-fpm
php7
phpstorm
php扩展
Protobuf
python
redis
scp
server
shell
soap
socket
socket5
sql
sre
ssdb
ssh
ssl
study
sublime
swift
system
td-agent
uml
v2ray
vagrant
vagrnat
vim
vpn
vue
vue.js
webpack
webrtc
websocket
webtatic
windows
windows7
word
wps
xdebug
yarn
yii2
yum
zookeeper
世界国家
互联网
以太坊
分类
前端
小程序
打印机
排序算法
搞笑
权限
粤语
缓存
网络
虚拟机
视频
设计模式
项目管理
热门文章
友情链接