Go 基础面试题, Go 语言中打印字符串时,%v 和 %+v 有什么区别?
Go 基础面试题, Go 语言中打印字符串时,%v 和 %+v 有什么区别?
QA
Step 1
Q:: Go 语言中打印字符串时,%v 和 %+
v 有什么区别?
A:: %v 是一种通用占位符,用于打印 Go 语言中的任意类型值。对于结构体,%v 会打印字段值而不显示字段名。%+
v 则是 %v 的扩展版本,它在打印结构体时,会包括字段名和字段值。这在调试时特别有用,因为你可以清楚地看到每个字段对应的值。
Step 2
Q:: Go 语言中的结构体是什么?如何定义和使用?
A:: 结构体(struct)是 Go 语言中的一种聚合数据类型,允许你将不同类型的字段组合在一起形成一个更复杂的数据结构。你可以通过 type
关键字定义一个结构体。例如:type Person struct { Name string; Age int }
,然后通过 p := Person{Name: "Alice", Age: 30}
来创建结构体实例。结构体常用于表示实体对象。
Step 3
Q:: 如何在 Go 语言中实现接口?什么是接口的零值?
A:: 接口是 Go 语言中的一种抽象类型,用于定义一组方法的集合,任何实现了这些方法的类型都自动实现了该接口。你可以通过 type MyInterface interface { Method1() string }
定义一个接口,然后实现接口的方法。在 Go 中,接口的零值是 nil
,这意味着如果一个接口变量未被赋值,则其内部值和类型都为 nil。
Step 4
Q:: Go 语言中的 Goroutine 和 Channel 是什么?它们如何协作?
A:: Goroutine 是 Go 语言中实现并发的轻量级线程,你可以通过 go
关键字来启动一个新的 Goroutine。Channel 是 Go 语言中的一种通信机制,允许 Goroutine 之间进行数据传输。Goroutine 和 Channel 通常一起使用,通过 Channel 传递数据来同步 Goroutine 的执行。例如,通过 c := make(chan int)
创建一个 Channel,然后通过 c <- 1
发送数据,通过 val := <-c
接收数据。