首页  

GO 面向对象编程     所属分类 go 浏览量 853
结构体可以有方法,相当于类
没有class,只有struct
用指针访问结构中的属性 用 . 而不是 -> ,指针像Java中的引用
没有public,protected,private等访问权限控制
大写 public ,小写 private
支持接口和多态 
接口不需要显式声明
Duck Type
只要 有 interface 相同的方法,就认为实现了该接口
只要能像鸭子那样叫,就认为它是一只鸭子


https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/oopdemo.go package main import ( "fmt" "math" ) type Pet struct { name string age int } func (p *Pet) getName() string { return p.name } type shape interface { area() float64 } type rect struct { width float64 height float64 } func (r *rect) area() float64 { return r.width * r.height } type circle struct { radius float64 } func (c *circle) area() float64 { return math.Pi * c.radius * c.radius } func main() { testStruct() testInterface() } func testStruct() { p1 := Pet{"cat", 3} p2 = Pet{name: "tiger", age: 7} fmt.Printf("%v,name=[%s]\n", p1, p1.getName()) fmt.Printf("%v,name=[%s]\n", p2, p2.getName()) ptr1 := &p1 fmt.Printf("%v,name=[%s]\n", ptr1, ptr1.getName()) ptr1.age = 5 ptr1.name = "cat2" fmt.Printf("%v,name=[%s]\n", ptr1, ptr1.getName()) } func testInterface() { r := rect { width: 3.0, height: 2.1 } c := circle { radius: 3.0 } s := []shape{ &r, &c } for i, sh := range s { fmt.Printf("Shape[%d] area=[%f]\n", i, sh.area()) } }

上一篇     下一篇
GO内建函数

GO make 和 new的区别

GO结构体三种初始化方式

GO reflect

GO基础选择题

MySQL timestamp 类型