zoukankan      html  css  js  c++  java
  • go(新)

    1. 自定义类型与别名

    1. 自定义类型
    type myInt int  // 指定一个新类型myInt为int类型
    var a myInt  // 声明a为myInt类型
    2. 别名
    type xInt = int  // 给int类型取个别名
    rune就是int32的别名

    2. 结构体语法结构

    1. 定义
    type person struct { name string age int hobby []string }

    // 使用
    func main{}
    var p person
    p.name = '张三'
    p.age = 33
    p.hobby = []string{'篮球','足球','双色球'}

    2. 匿名结构体(临时使用)
    var s struct {
    name string
    age int
    }

     3. go语言中,函数传参,永远是拷贝。想要改原变量的值,应该传内存地址

    1. 传变量名

     2. 传变量地址

     3. 结构体占用一块的内存空间

     4. 构造函数

    Python中构造函数的含义:构造函数也被称为构造器,当创建对象的时候第一个被自动调用的函数(类中的init函数)
    package main

    import "fmt"
    // 构造函数

    type person struct {
        name string
        age int
    }

    // 构造函数:约定成俗用new开头
    // 当结构体比较大的时候尽量使用结构体指针,较少程序的内存开销
    func newPerson(name string, age int) *person {
        return &person{
            name: name,
            age: age,
        }
    }

    func main() {
        p1 := newPerson("aa", 18)
        p2 := newPerson("bb", 29)
        fmt.Println(p1, p2)
    }

    5. 方法与接收者

    给接收者类型增加方法,即可以通过  接收者实例.方法名  的形式调用新加的方法
    格式如下:
    func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
        函数体
    }


    ----------------------
    代码示例:
    package main

    import "fmt"

    type dog struct {
        name string
    }

    // 构造函数
    func newDog(name string) dog {
        return dog{
            name: name,
        }
    }

    // 方法是作用于特定类型的函数
    // 接收者是调用该方法的具体类型变量,多用类型名首字母小写表示
    func (d dog) wang() {
        fmt.Printf("%s:汪汪汪~", d.name)

    func main() {
        d1 := newDog("aa")
        d1.wang()
    }

    6. 给类型添加方法示例

    1. 注意函数传值是copy一份,并对copy后的数据进行处理
    package main
    
    import "fmt"
    
    type person struct {
        name string
        age int8
    }
    
    // 构造person函数
    func newPerson(name string, age int8) *person {
        return &person{
            name: name,
            age: age,
        }
    }
    
    // 给person类型添加dream方法
    func (p person) ageAdd() {
        p.age++
    }
    
    func (p *person) ageAddTrue() {
        p.age++
    }
    
    func main() {
        p1 := newPerson("aa", 34)
        fmt.Println(p1.age) // 结果34
        p1.ageAdd()
        fmt.Println(p1.age) // 结果34,调用函数时,p1会被copy一份,函数处理的时copy出来的实例,所以应该传指针
        p1.ageAddTrue()
        fmt.Println(p1.age) // 结果35
    }
    
    2. 重写内置类型,并新加方法
    package main
    
    import "fmt"
    
    // 给自定义类型加方法
    
    type myInt int
    
    func (m myInt) hello() {
        fmt.Println("我是一个int")
    }
    
    func main() {
        m := myInt(100)
        m.hello()
    }
  • 相关阅读:
    网络爬虫概述
    Redis常见问题汇总
    分布式锁和Redis事务
    Redis主从复制
    数据持久化
    位图操作bitmap
    数据类型:Hash散列数据类型
    进程池
    事件Event实现消费者模型
    事件Event
  • 原文地址:https://www.cnblogs.com/JackShi/p/14227450.html
Copyright © 2011-2022 走看看