• Go之结构体与方法


    package main
    
    import "fmt"
    // import "strings"
    
    // Go语言提供了一种自定义数据类型,可以封装多个基本数据类型
    // 这种数据类型叫结构体
    // Go语言通过struct实现面向对象
    // 使用type 和 struct关键字来实现结构体
    type person struct{
    	name string
    	city string
    	age int8
    }
    type myInt int
    
    func main() {
    
    	// 只有当结构体实例化,才会真正分配内存
    	// 也就是实例化后才能使用结构体的字段
    	// var 结构体实例 结构体类型
    	var p1 person
    	p1.name = "迪丽热巴"
    	p1.city = "北京"
    	p1.age = 18
    	fmt.Println(p1)
    	fmt.Println(p1.name)
    
    	// 匿名结构体
    	// 在实例化的时候定义
    	var dog struct{
    		name string
    		sex bool
    	}
    	dog.name = "贝贝"
    	dog.sex = false
    	fmt.Println(dog)
    
    	// 结构体指针
    	var p2 = new (person)
    	(*p2).name = "tony"
    	// 语法糖。结构体类型的指针使用字段与结构体方法一致
    	p2.age = 99
    	fmt.Println(p2)
    	
    	// 取结构体的地址进行实例化
    	p3 := &person{}
    	fmt.Println(p3)
    
    	// 使用键值对初始化
    	p4 := person{
    		name: "小王子",
    	}
    	fmt.Println(p4)
    	// 使用值的列表初始化
    	p5 := &person{
    		"小王子",
    		"北京",
    		33,
    	}
    	fmt.Println(p5)
    
    	// 实现结构体的构造函数。
    	// 因为struct是值类型,如果结构体比较复杂的话,
    	// 值拷贝性能开销会比较大,所以该构造函数返回的是结构体指针类型
    	p6 := newPerson("郭靖", "襄阳", 28)
    	fmt.Println(p6)
    
    	// 方法
    	// go语言种的方法是一种所用与特定类型变量的函数。
    	// 这种特定类型变量叫做接收者。
    	// func(接受者变量 接收者类型)方法名(参数列表)(返回参数){
    	//		函数体
    	// }
    	// 调用方法
    	p6.Dream()
    	p6.setAge(99)
    	fmt.Println(p6.age)
    
    	var i myInt = 4
    	i.printMyint()
    
    }
    
    // 为自定义类型添加方法
    // 注意:只能为包内定义的类型添加方法
    func (i myInt)printMyint(){
    	fmt.Println(i)
    }
    
    // 为person类型定义方法
    func (p person) Dream(){
    	fmt.Println(p.name, "的梦想是学好golang")
    }
    // 为person类型定义修改年龄的方法
    // 指针接收者指的是接收者的类型是指针
    func (p *person)setAge(age int8){
    	p.age = age
    }
    func newPerson(name, city string, age int8) *person{
    	return &person{
    		name: name,
    		city: city,
    		age: age,
    	}
    }
    
  • 相关阅读:
    object detection物体检测基本概念
    anaconda python环境搭建
    Eclipse环境下添加package到工程的classpath
    34-使用函数实现-文件拷贝
    33-使用函数实现-斐波那契数列
    32-简单的位置参数
    31-分段进行文件拷贝
    30-Python文件拷贝
    29-简单的文件对象基础操作
    28-石头剪刀布:三局两胜
  • 原文地址:https://www.cnblogs.com/cl94/p/13805992.html
Copyright © 2020-2023  润新知