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

自定义类型

go 复制代码
package main
import ("fmt")

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

类型别名

go 复制代码
package main
import ("fmt")

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

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

结构体的命名

注意:结构体首字母可以大写也可以小写,

大写表示这个结构体是公有的,在其他的包里面可以使用。

小写表示这个结构体是私有的,只有这个包里面才能使用。

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

go 复制代码
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}

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

go 复制代码
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="张三"

go 复制代码
package main
import ("fmt")

type Person struct {
  name string
  age int
}

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

实例化结构体(三)

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

go 复制代码
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)
}

实例化结构体(四)

go 复制代码
package main
import ("fmt")

type Person struct {
  name string
  age int
}

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

实例化结构体(五)

go 复制代码
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是指针类型
}
相关推荐
考虑考虑6 小时前
JDK26中的Map.ofLazy
java·后端·java ee
云浪7 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
苏三的开发日记7 小时前
Docker 启动顺序优化(CentOS / Ubuntu)
后端
敲代码的玉米C8 小时前
并排 diff、提交标签:砚的 Git 阅读体验又补了一轮
go
敲代码的玉米C8 小时前
给编辑器补拖拽:标签挪过去,状态也得跟过去
go
敲代码的玉米C8 小时前
写到这里,砚还要继续照着 IDE 加功能吗
go
敲代码的玉米C8 小时前
把终端拖进编辑区,别把正在跑的 shell 弄丢了
go
敲代码的玉米C8 小时前
给砚加一个「所有改动」页,提交前少来回点几次
go
高频因子挖掘机9 小时前
同一交易日出现重复 K 线:去重前先确认时间、来源和粒度
后端·github·api
feely020810 小时前
《我写了 31 个静态扫描插件,踩了 7 个「假绿」》
后端