ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

速战速决 go - go 面向对象: 结构体(定义结构体,声明结构体,初始化结构体,使用结构体,匿名结构体)

2022-02-08 14:36:00  阅读:168  来源: 互联网

标签:初始化 abc fmt 面向对象 go xyz 结构


速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

速战速决 go - go 面向对象: 结构体(定义结构体,声明结构体,初始化结构体,使用结构体,匿名结构体)

示例如下:

oop/struct1.go

// go 面向对象 - 结构体(定义结构体,声明结构体,初始化结构体,使用结构体,匿名结构体)

package oop

import "fmt"

func Struct1Sample() {
	struct1_sample1()
	struct1_sample2()
}

func struct1_sample1() {
	// 声明一个指定类型的结构体(结构体中的每个成员会用默认值初始化)
	var a struct11
	fmt.Println(a) // {0  }
	// 为结构体成员赋值
	a.a = 0
	a.b = "abc"
	a.c = "xyz"
	// 输出结构体信息
	// %v 仅输出字段的值
	// %+v 输出字段的名称和字段的值
	// %#v 输出结构体类型,以及字段的名称和字段的值
	fmt.Printf("%v\n", a)  // {0 abc xyz}
	fmt.Printf("%+v\n", a) // {a:0 b:abc c:xyz}
	fmt.Printf("%#v\n", a) // oop.struct11{a:0, b:"abc", c:"xyz"}

	// 用 new() 声明的结构体返回的是指针
	b := new(struct11)
	// 因为 b 是指针,所以要按如下方式赋值
	(*b).a = 0
	// 因为 go 支持语法糖(syntactic sugar)技术,他会自动转换的,所以你可以按如下方式赋值
	b.a = 0
	b.b = "abc"

	// 声明一个指定类型的结构体,用 key/value 的方式对其成员做初始(不要求所有成员都初始化)化,也允许不手工初始化,但是 {} 要保留
	// 前面加 & 返回的就是指针,前面不加 & 返回的就是指针指向的值
	c := &struct11{
		a: 0,
		b: "abc",
	}
	fmt.Println(c) // &{0 abc }

	// 声明一个指定类型的结构体,按顺序对其成员做初始化(必须对每个成员都做初始化),也允许不手工初始化,但是 {} 要保留
	// 前面加 & 返回的就是指针,前面不加 & 返回的就是指针指向的值
	d := &struct11{
		0,
		"abc",
		"xyz",
	}
	fmt.Println(d) // &{0 abc xyz}

	// 使用结构体中的成员
	fmt.Println(d.a, d.b, d.c) // 0 abc xyz

	// 结构体的相等判断:如果两个结构体中的所有成员的值都相同,则这两个结构体是相等的
	fmt.Println(*b == *c, *b == *d) // true false
}

// 定义一个结构体
type struct11 struct {
	a    int
	b, c string
}

func struct1_sample2() {
	// 声明一个匿名结构体
	// 前面加 & 返回的就是指针,前面不加 & 返回的就是指针指向的值
	a := &struct {
		a int
		b string
	}{
		0,
		"abc",
	}
	fmt.Println(a) // &{0 abc}
}

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

标签:初始化,abc,fmt,面向对象,go,xyz,结构
来源: https://www.cnblogs.com/webabcd/p/go_oop_struct1.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有