go by example
指针
GO可以像c一样通过指针访问和修改变量的值
package main
import "fmt"
func main() {
/* 指针 &取地址符 *地址引用 */
v := 0
fmt.Println(v)
changevalue(v)
fmt.Println(v)
changevalueByPoint(&v)
fmt.Println(v)
}
func changevalue(v int) {
v = 1
}
func changevalueByPoint(vp *int) {
*vp = 1
}
changevalueByPoint直接通过引用内存地址赋值可以修改变量v的值
原文链接
结构体(struct)
结构体是go提供的一种特殊数据类型,方便用户自定数据类型来描述一个对象
type struct_name struct {
filed1 type1
filed2 type2
}
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
person := Person{name:"cx", age:26}
fmt.Println(person)
//数据读取,用.操作符
fmt.Println(person.name)
//修改值
person.name = "hxh"
fmt.Println(person)
//指针操作
personp := &person
fmt.Println(personp.name,personp.age)
}
结构体方法
go支持给struct类型定义方法
package main
import "fmt"
type rect struct {
width, height int
}
//接受的是指针
func (r *rect) area() int {
return r.width * r.height
}
//接受的是struct实参
func (r rect) zc() int {
return 2*r.width + 2*r.height
}
func mian() {
//go语言会自动转换值和指针,所以struct的方法定义指针和实参都是可以的
rect := rect{width:10, height:10}
fmt.Println("area:", rect.area())
fmt.Println("zc:", rect.zc())
rectp := &rect
fmt.Println("area:", rectp.area())
fmt.Println("zc:", rectp.zc())
}
接口
go语言中接口称为方法名的集合
package main
import (
"fmt"
"math"
)
// 算数接口定义
type geometry interface {
area() float64
perim() float64
}
// 定义结构体矩形
type rect struct {
width, height float64
}
//定义结构体圆
type circle struct {
radius float64
}
//矩形结构体实现geometry接口
func (r rect) area() float64 {
return r.width * r.height
}
func (r rect) perim() float64 {
return 2*(r.width + r.height)
}
//圆结构体实现geometry接口
func (c circle) area() float64 {
return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
return math.Pi * 2 * c.radius
}
func main() {
rect := rect{width:10,height:10}
circle := circle{radius:2}
fmt.Println("rect area:", rect.area())
fmt.Println("rect perim:", rect.perim())
fmt.Println("circle area", circle.area())
fmt.Println("circle perim", circle.perim())
}
如果某类型拥有某个接口所需的所有方法,那么该类型就实现/满足了该接口。
这里有比较详细的解释:https://blog.csdn.net/qq_31179577/article/details/82901138