« Back to Index

[golang avoid promoted field in literal struct error]

View original Gist on GitHub

Tags: #go #golang #struct #promoted #field #error

golang avoid promoted field in literal struct error.go

package main

import (
	"fmt"
)

type A struct {
	enabled bool
}

func (a *A) isEnabled() bool {
	fmt.Println("A isEnabled")
	return a.enabled
}

type B struct {
	A
}

func (b *B) isEnabled() bool {
	fmt.Println("B isEnabled")
	return b.A.isEnabled()
}

func main() {
	/*
		a := &A{enabled: true}
		b := &B{enabled: false}

		fmt.Printf("a: %#v\n", a.isEnabled())
		fmt.Printf("b: %#v\n", b.isEnabled())

		// cannot use promoted field A.enabled in struct literal of type B
	*/

	var a A
	a.enabled = true

	var b B
	b.enabled = false

	fmt.Printf("a: %#v\n", a.isEnabled())
	fmt.Printf("b: %#v\n", b.isEnabled())
  
  	/*
		A isEnabled
		a: true
		B isEnabled
		A isEnabled
		b: false
	*/
}