GO实例学习

指针

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)
}

struct is mutable

结构体方法

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())
}

struct has methods

接口

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值