Go struct 匿名字段 - meetbill/chi GitHub Wiki

package main

import "fmt"

type DBAccountInfo struct {
	User       string
	Password   string
	Socket     string
	Encryption bool
}

// go 支持只提供类型而不写字段名的方式,也就是匿名字段,也称为嵌入字段
type InstanceConfig struct {
	DBAccountInfo // (匿名嵌入)
	Name          string
}

func main() {
	// 1 直接初始化 DBAccountInfo
	var config InstanceConfig
	config.DBAccountInfo = DBAccountInfo{User: "admin", Password: "123456"}
	// {admin 123456  false}
	fmt.Println(config.DBAccountInfo)
	// amdin
	fmt.Println(config.User)
	// 123456
	fmt.Println(config.Password)

	// 2 指定 User 赋值
	var config2 InstanceConfig
	config2.Name = "demo2"
	config2.User = "demoUser"
	// demoUser
	fmt.Println(config2.User)
	//
	fmt.Println(config2.Password)

	// 3 不能初始化的时候,直接使用 {User: "xxx"} 赋值
	config3 := InstanceConfig{User: "admin", Password: "123456"}
	// ./demo.go:37:27: unknown field User in struct literal of type InstanceConfig
	// ./demo.go:37:42: unknown field Password in struct literal of type InstanceConfig
	fmt.Println(config3.User)
}