zoukankan      html  css  js  c++  java
  • go常用编程风格

    go没有普通的类概念,可以随心所欲的根据自己的喜好来编写自己喜欢的风格
    类型系统:
    可以在已有类型之上增加新类型
    type Integer int 
    func (a Integer) Less(b Integer) bool(
        return a<b
    )
    也可以新增类型
    type Person struct{
            name string
    }
    func (p *Person) say(){
    }
     
    func (p *Person) walk(){
    }
    继承:
    继承是使用匿名组合的方法
    type Person struct{}
     
    func(p *Person) ShowA(){
        p.ShowB()
    }
     
    func(p *Person) ShowB(){}
     
    type Teacher struct{
        Person
    }
     
    func (t *Teacher ) ShowB(){}
     
    func main(){
     t:=Teacher()
        t.ShowA()
    }
    这是Golang的组合模式,可以实现OOP的继承。注意,被组合的类型Person虽然升级成了外部类型的方法,但是他们的方法调用时接收者并没有发生变化,此时Person并不知道自己被什么类型组合,所以showA中会调用Person的ShowB
     
    多态:
    type mm interface(){ mm() }
    type A struct{
    }
    func (*a A) mm(){}
     
    type B struct{
    }
    func (*b B) mm(){}
     
    send(m mm){m.mm()} 
      a:=A{}  send(a)
    b:B{}  send(b)
    A的实例和B的实例都可以使用send方法,这是多态的体现
     
    接口:
    接口推断:系统可以根据 func (a Integer) Less{}
    自动生成func(a *Integer) Less{ (*a).Less(b)}
    但是无法根据 func(a *Integer) Less{}自动生成
    func (a Integer) Less{(&a).Less() }
    原因是&a只会改变函数参数的对象,不会改变实际操作的对象。
     
    闭包
    go 存在闭包的特性,这点用法和JS类似
    for i:=0;i<10;i++{
        go func(){
            fmt.PrintLn("A:",i)
        }
        go func(){
            fmt.Println("B:",i)
        }(i)
    }
    A均为10,B是0-9,顺序不定
    有意思的是,可以利用go的闭包,模拟私有变量
    因为go的命名规则内部小写类似protected ,大写类似public,而类型的私有变量private,可以通过闭包模拟,当然更平常的方式是套上额外的一层结构,即内嵌结构,来使得外界不能覆盖。
    type File struct{
        *file
    }
    type file struct{
        fd int
        name string
    }
     
     
     
  • 相关阅读:
    SQL Server 2008 数据库回滚到某个时间点
    SQL Server 2008以上误操作数据库恢复方法——日志尾部备份
    C# BindingSource
    何谓SQL Server参数嗅探
    mongodb获取具体某一天的查询语句
    给MongoDB添加索引
    MongoDB 学习笔记四 C#调用MongoDB
    Access MongoDB Data with Entity Framework 6
    Ruby 和 OpenSSL CA 证书的问题
    解决方法:配置群集时# gem install redis 报错:Unable to require openssl, install OpenSSL and rebuild ruby
  • 原文地址:https://www.cnblogs.com/wanglao/p/11162564.html
Copyright © 2011-2022 走看看