Go语言中*号在类型声明中代表什么含义?

Go语言中*号在类型声明中代表什么含义?

go语言指针详解及示例

在Go语言中,*号在类型声明中表示指针类型。它与作为取值操作符的*有所不同,在类型声明中,*表示声明的变量是一个指针,指向某个特定数据类型的内存地址。

让我们通过一个例子来理解:

package main  import "fmt"  type Employee struct {     Id   string     Name string     Age  int }  func main() {     // 直接创建 Employee 类型的变量     e := Employee{"0", "P1", 33}      fmt.Printf("e: %Tn", e) // 输出: e: main.Employee      // 使用 new() 函数创建 Employee 指针类型的变量     eNewed := new(Employee) // new() 返回的是一个指针     eNewed.Id = "1"     fmt.Printf("eNewed: %Tn", eNewed) // 输出: eNewed: *main.Employee      // *int 表示指向 int 类型变量的指针     var intPtr *int     var i int = 10     intPtr = &i // & 获取变量的内存地址     fmt.Printf("intPtr: %T, *intPtr: %vn", intPtr, *intPtr) // 输出: intPtr: *int, *intPtr: 10      //*[]int 表示指向 []int (整型切片) 的指针     var slicePtr *[]int     var intSlice []int = []int{1,2,3}     slicePtr = &intSlice     fmt.Printf("slicePtr: %T, *slicePtr: %vn", slicePtr, *slicePtr) // 输出: slicePtr: *[]int, *slicePtr: [1 2 3] }

在这个例子中:

立即学习go语言免费学习笔记(深入)”;

  • e 是一个 Employee 类型的变量,它直接存储了 Employee 结构体的数据。
  • eNewed 是一个 *Employee 类型的变量,它是一个指针,存储的是 Employee 结构体数据的内存地址。 new(Employee) 分配了一块内存用于存储 Employee 结构体,并返回指向这块内存的指针。
  • *int 定义了一个指向整数的指针。&i 获取整数变量 i 的内存地址,并将其赋值给 intPtr。 *intPtr 则访问 intPtr 指向的内存地址中的值。
  • *[]int 定义了一个指向整型切片的指针,类似的,*slicePtr 访问 slicePtr 指向的内存地址中的切片数据。

因此,* 在类型声明中表示指针类型,它不是取值操作符,而是类型定义的一部分,指示该变量存储的是内存地址而不是实际数据。 通过指针,我们可以间接操作内存中的数据,实现高效的内存管理和数据共享。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享