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

 

posted @ 2021-01-03 23:20  10132714  阅读(123)  评论(0编辑  收藏  举报