自定义类型和类型别名以及实例化结构体的5种方式

自定义类型

package main
import ("fmt")

// 自定义类型
type MyInt int
func main()  {
  var a MyInt = 10
	// 输出的是:类型是main.MyInt,值是10
	fmt.Printf("类型是%T,值是%d\n",a,a)
}

类型别名

package main
import ("fmt")

// 类型别名
type MyInt = int
func main()  {
  var a MyInt = 10
	// 输出的是:类型是int,值是10
	fmt.Printf("类型是%T,值是%d\n",a,a)
}

注意类型别名和自定义类型的区别

结构体的命名

注意:结构体首字母可以大写也可以小写,
大写表示这个结构体是公有的,在其他的包里面可以使用。
小写表示这个结构体是私有的,只有这个包里面才能使用。

定义一个结构体,并且实例化它的一种方式(一)

package main
import ("fmt")
// 这个结构体是私有的哈
type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构
	var p Person
	// 给结构体附上值
	p.name = "Tom"
	p.age = 18
	fmt.Println(p)
  // 打印结构体使用 %#v
  fmt.Printf("值:%#v",p)
}

输出:{Tom 18}
输出:值:main.Person{name:"Tom", age:18}

定义一个结构体,并且实例化它的一种方式(二)

package main
import ("fmt")

type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构的另外一种方式
	var p = new(Person)
	// 给结构体附上值
	p.name = "Tom" 
	p.age = 18
	fmt.Println(p)
	fmt.Printf("值:%#v",p)
}

new 方法实例化结构体(二)

注意:在 Golang中支持对结构体指针直接使用,来访问结构体的成员。
p2.name="张三" 其实在底层是 (*p2).name="张三"

package main
import ("fmt")

type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构的另外一种方式
	var p = new(Person)
	p.age = 18
	// 设置结构体属性的另外一种方式,通过指针的方式来设置
	(*p).name = "Tom"
}

实例化结构体(三)

&变量名: 表示变量的内存地址,也叫做指针

package main
import ("fmt")

type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构的另外一种方式
	var p = &Person{}
	p.age = 18
	// 设置结构体属性的另外一种方式
	(*p).name = "Tom"
	fmt.Printf("值:%#v",p)
}

实例化结构体(四)

package main
import ("fmt")

type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构的另外一种方式(第4种)
	var p = Person{
		name: "张三",
		// 最后一个需要添加逗号的哈
		age: 18,
	}
}

实例化结构体(五)

package main
import ("fmt")

type Person struct {
  name string
  age int
}

func main()  {
	// 实例化Person结构的另外一种方式(第5种)
	var p = &Person{
		name: "张三",
		// 最后一个需要添加逗号的哈
		age: 18,
	}
	// 值:&main.Person{name:"张三", age:18}, 类型:*main.Person
	fmt.Printf("值:%#v, 类型:%T",p,p) // 这个p是指针类型
}
posted @ 2026-09-26 14:22  何人陪我共长生  阅读(9)  评论(0)    收藏  举报