Go语言:聊聊结构体

GO结构体

go语言中是没有类的
但是go语言中可以使用结构体来定义类似与java类的结构
并借此来实现面向对象

结构体的定义

go语言中定义结构体是使用 type 和 struct

type person struct {
	name string
	age  int
}

person 就是一个结构体 有着name和age两个属性

结构体的声明

	var p = person{}
	fmt.Printf(" type : %T",p)
	//输出: type : main.person
结构体的赋值
	//声明时赋值
	var p = person{
		name: "927",
		age:  17,
	}
	fmt.Println("----------------------------------------------------------------------------")

	//声明时赋值 按属性顺序赋值
	var p = person{
		 "927",
		 17,
	}

 
	fmt.Println("----------------------------------------------------------------------------")

	
	//声明后赋值
	var p = person{}
	p.name="927"
	p.age=18

	fmt.Println("----------------------------------------------------------------------------")

	//构造函数赋值

	p:= newPerson("927",17)
	
type person struct {
	name string
	age  int
}
func  newPerson(name string, age int) person{
	return person{
		name: name,
		age:  age,
	}

结构体的属性 只要用相同字段类型接收好了

	var p = person{
		name: "927",
		age:  17,
	}
	var age string 
	age = p.name
	fmt.Println(age)
结构体定义方法

面向对象:人能做什么 吃饭 跑步等等
现在我给结构体定义一个方法
方法的定义 与函数结构差不多
函数: func 方法名(参数)(返回值){
}
方法 : func (结构体)方法名(参数)(返回值){
}

//给 person 定义一个方法 输出一句话
func (p person) eat(food string) {
	fmt.Printf(" %s 在吃 %s ", p.name, food)
}
方法的使用

声明结构体 使用结构体 . 方法名
完整代码 ↓

 package main

import "fmt"
//定义结构体 person
type person struct {
	name string //定义name属性 string类型
	age  int
}
//构造函数 接收属性 返回person结构体
//构造函数一般以new结构体名 命名
func newPerson(name string, age int) person {
	return person{
		name: name, 
		age:  age,
	}
}
//声明persond的eat方法
func (p person) eat(food string) {
	fmt.Printf(" %s 在吃 %s ", p.name, food)
}

func main() {
	p := newPerson("927", 17)
	p.eat("海苔")
	//输出: 927 在吃 海苔 
}
 
匿名结构体

在定义一些临时数据结构等场景下还可以使用匿名结构体
不常用 注意是分号

	var v struct{ name string; age int}
	v.name="927"
	v.age=17
为什么要有指针类型结构体

go语言函数传参都是值拷贝
如果结构体数据过多 每次拷贝都会较多消耗资源 使用指针类型

结构体是值传递
package main

import "fmt"

func main() {
	p:= newPerson("927",17)
	fmt.Println(p.age)
	p.addAge()
	fmt.Println(p.age)
	//输出
	//17
	//17
}

type person struct {
	name string
	age  int
}

func newPerson(name string, age int) person {
	return person{
		name: name,
		age:  age,
	}
}

func (p person) addAge() {
 		p.age++
}

指针结构体的使用

使用new函数创建

package main

import "fmt"

func main() {
	 p := new(person)
	 p.age=17
	 fmt.Printf("type:  %T",p)
	 //type   *main.person
}

type person struct {
	name string
	age  int
}


通过构造函数创建指针

package main

import "fmt"

func main() {
	p := newPerson("927", 17)
	fmt.Printf("type:  %T", p)
}

type person struct {
	name string
	age  int
}
// 返回指针类型
func newPerson(name string, age int) *person {
	return &person{
		name: name,
		age:  age,
	}
}

定义指针方法
package main

import "fmt"

func main() {
	p := newPerson("927", 17)
	p.addAge()
	fmt.Println(p.age)
	//输出 18
}

type person struct {
	name string
	age  int
}

func newPerson(name string, age int) *person {
	return &person{
		name: name,
		age:  age,
	}
}
func (p *person) addAge(){
	p.age++
}
发布了15 篇原创文章 · 获赞 2 · 访问量 1635

猜你喜欢

转载自blog.csdn.net/ZHOUAXING/article/details/105156304