go结构体的定义

简介: go结构体的定义

一、结构体的定义

//结构定义
type Employee struct {
  Id   string
  Name string
  Age  int
}

二、实例的创建

 
 //初始化结构体
func TestCreateEmployeeObj(t *testing.T) {
  e := Employee{"0", "bob", 20}
  e1 := Employee{Name: "MIke", Age: 30}
  //返回指针
  e2 := new(Employee)
  e3 := Employee{}
  e.Name = "ccc"
  e2.Id = "2"
  e2.Age = 22
  t.Log(e)
  t.Log(e1)
  t.Log(e1.Id)
  t.Log(e2)
  t.Log(e3)
  t.Logf("e is %T", e)
  t.Logf("e2 is %T", e2)
}

三、结构体行为定义

//定义结构体的行为,实例访问
func (e Employee) String() string {
  fmt.Printf("String-Address is %x\n", unsafe.Pointer(&e.Name))
  return fmt.Sprintf("ID:%s-Name%s-age:%d", e.Id, e.Name, e.Age)
}
 
//定义结构体的行为,指针访问
func (e *Employee) StringTo() string {
  fmt.Printf("StringTo-Address is %x\n", unsafe.Pointer(&e.Name))
  return fmt.Sprintf("ID:%s-Name%s-age:%d", e.Id, e.Name, e.Age)
}
func TestStructOPerations(t *testing.T) {
  e := Employee{"0", "bob", 20}
  fmt.Printf("Address is %x\n", unsafe.Pointer(&e.Name))
  t.Log(e.String())
  t.Log(e.StringTo())
}

四、完整代码

package encapsulation
 
import (
  "fmt"
  "testing"
  "unsafe"
)
 
//结构定义
type Employee struct {
  Id   string
  Name string
  Age  int
}
 
//初始化结构体
func TestCreateEmployeeObj(t *testing.T) {
  e := Employee{"0", "bob", 20}
  e1 := Employee{Name: "MIke", Age: 30}
  //返回指针
  e2 := new(Employee)
  e3 := Employee{}
  e.Name = "ccc"
  e2.Id = "2"
  e2.Age = 22
  t.Log(e)
  t.Log(e1)
  t.Log(e1.Id)
  t.Log(e2)
  t.Log(e3)
  t.Logf("e is %T", e)
  t.Logf("e2 is %T", e2)
}
 
//定义结构体的行为,实例访问
func (e Employee) String() string {
  fmt.Printf("String-Address is %x\n", unsafe.Pointer(&e.Name))
  return fmt.Sprintf("ID:%s-Name%s-age:%d", e.Id, e.Name, e.Age)
}
 
//定义结构体的行为,指针访问
func (e *Employee) StringTo() string {
  fmt.Printf("StringTo-Address is %x\n", unsafe.Pointer(&e.Name))
  return fmt.Sprintf("ID:%s-Name%s-age:%d", e.Id, e.Name, e.Age)
}
func TestStructOPerations(t *testing.T) {
  e := Employee{"0", "bob", 20}
  fmt.Printf("Address is %x\n", unsafe.Pointer(&e.Name))
  t.Log(e.String())
  t.Log(e.StringTo())
}
=== RUN   TestCreateEmployeeObj
String-Address is c00007c880
    encap_test.go:26: ID:0-Nameccc-age:20
String-Address is c00007c940
    encap_test.go:27: ID:-NameMIke-age:30
    encap_test.go:28: 
String-Address is c00007c970
    encap_test.go:29: ID:2-Name-age:22
String-Address is c00007c9d0
    encap_test.go:30: ID:-Name-age:0
    encap_test.go:31: e is encapsulation.Employee
    encap_test.go:32: e2 is *encapsulation.Employee
--- PASS: TestCreateEmployeeObj (0.00s)
=== RUN   TestStructOPerations
Address is c00007ca90
String-Address is c00007cac0
    encap_test.go:49: ID:0-Namebob-age:20
StringTo-Address is c00007ca90
    encap_test.go:50: ID:0-Namebob-age:20
--- PASS: TestStructOPerations (0.00s)
PASS
相关文章
|
11月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
8月前
|
Go
Go语言接口的定义与实现
Go 语言的接口提供了一种灵活的多态机制,支持隐式实现和抽象编程。本文介绍了接口的基本定义、实现方式、空接口的使用、类型断言以及接口组合等核心概念,并探讨了接口与 nil 的关系及应用场景。通过示例代码详细说明了如何利用接口提升代码的可扩展性和可测试性,总结了接口的关键特性及其在依赖注入、规范定义和多态调用中的重要作用。
329 14
|
8月前
|
JSON Go C语言
Go语言之定义结构体(Struct)-《Go语言实战指南》
Go 语言中的结构体(`struct`)是一种复合数据类型,可将多个不同类型的字段组合成一个类型。本文介绍了结构体的基本定义、实例创建方式、字段访问与修改、零值特性、比较规则、嵌套使用及标签功能。通过示例代码详细讲解了如何定义和操作结构体,以及其在 JSON 编码等场景的应用。
|
8月前
|
Go 索引
Go语言数组的定义与操作 - 《Go语言实战指南》
本文介绍了 Go 语言中的数组(Array)相关知识,包括定义、初始化方式(默认、显式、指定索引及自动推导长度)、访问与修改、遍历方法(for 循环和 for range)、值类型特性(复制行为)、多维数组支持以及其与切片的区别。数组是定长且同类型的集合,适合性能敏感场景,但实际开发中更常用动态的切片(slice)。
266 11
|
8月前
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
156 12
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
366 71
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
273 1
Go nil 空结构体 空接口有什么区别?
|
编译器 Go
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
165 3
go语言定义常量
【10月更文挑战第20天】
195 2
Go to Learn Go之结构体
Go to Learn Go之结构体
127 5