Go语言:聊聊结构体

14 篇文章 0 订阅
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++
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值