Go-struct嵌套初始化与赋值

2024-09-04 21:48

本文主要是介绍Go-struct嵌套初始化与赋值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

struct嵌套的几种用法。

示例一

package mainimport "fmt"
import "encoding/json"type Point struct {X, Y int
}type Circle struct {Center PointRadius int
}type Wheel struct {Circle CircleSpokes int
}func foo() {var w Wheelw.Circle.Center.X = 8w.Circle.Center.Y = 8w.Circle.Radius = 5w.Spokes = 20fmt.Println("foo(): ", w)
}type Circle2 struct {Point  // anonymous fields with a named typeRadius int
}type Wheel2 struct {Circle2Spokes int
}func bar() {var w Wheel2w.X = 18w.Y = 18w.Radius = 15w.Spokes = 120fmt.Println("bar(): ", w)
}type Wheel3 struct {*PointRadius int
}func baz() {var w Wheel3w = Wheel3{&Point{28, 28}, 25}json_string, err := json.Marshal(w)if err != nil {fmt.Println("Error: ", err)} else {fmt.Printf("baz(): %s\n", json_string)}fmt.Printf("baz(): %#v\n", w)}/*
foo():  {{{8 8} 5} 20}
bar():  {{{18 18} 15} 120}
baz(): {"X":28,"Y":28,"Radius":25}
baz(): main.Wheel3{Point:(*main.Point)(0xc04200a340), Radius:25}
*/
func main() {foo()bar()baz()
}

示例二

package mainimport "fmt"type Student struct {name stringage  int
}type People struct {Student
}func (people *People) Print() {fmt.Printf("People[name:%s, age:%d]\n", people.name, people.age)
}func PrintStudent(student *Student) {fmt.Printf("Student[name:%s, age:%d]\n", student.name, student.age)
}/*
People[name:Tom, age:3]
People[name:Jerry, age:5]
Student[name:Tom, age:3]
People[name:Tom, age:4]
Student[name:Tom, age:3]
*/
func main() {people := People{}people.name = "Tom"people.age = 3people2 := People{Student{name: "Jerry", age: 5}}people.Print()people2.Print()var student Studentstudent = people.StudentPrintStudent(&student)var people3 People = People{student}people3.age++people3.Print()PrintStudent(&student)
}

这篇关于Go-struct嵌套初始化与赋值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137121

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

Go Select的实现

select语法总结 select对应的每个case如果有已经准备好的case 则进行chan读写操作;若没有则执行defualt语句;若都没有则阻塞当前goroutine,直到某个chan准备好可读或可写,完成对应的case后退出。 Select的内存布局 了解chanel的实现后对select的语法有个疑问,select如何实现多路复用的,为什么没有在第一个channel操作时阻塞 从而导

Go Channel的实现

channel作为goroutine间通信和同步的重要途径,是Go runtime层实现CSP并发模型重要的成员。在不理解底层实现时,经常在使用中对channe相关语法的表现感到疑惑,尤其是select case的行为。因此在了解channel的应用前先看一眼channel的实现。 Channel内存布局 channel是go的内置类型,它可以被存储到变量中,可以作为函数的参数或返回值,它在r

Go 数组赋值问题

package mainimport "fmt"type Student struct {Name stringAge int}func main() {data := make(map[string]*Student)list := []Student{{Name:"a",Age:1},{Name:"b",Age:2},{Name:"c",Age:3},}// 错误 都指向了最后一个v// a