I am fairly new to Go and I have been doing OOP for a long time. Now, I understand that inheritance is done via composition but ... I'd like to send a specialization in a function expecting a generalization as such:

package main

import (
    "fmt"
)

type A struct {
    ONE int
}

type B struct {
    A
    ANOTHER int
}

func main() {
    fmt.Println("Hello, playground")

    a := A{1}
    b := B{a, 2}

    fmt.Println(a.ONE)
    fmt.Println(b.ANOTHER)

    takeA(&b)
}

func takeA(a *A) {

    fmt.Println(a.ONE)
}
takeA(&b.A)

Is there a way around this? Or should I create a dumb interface such as:

package main

import (
    "fmt"
)

type A struct {
    ONE int
}

func (a A) getOne() int{
    return a.ONE
}

type B struct {
    A
    ANOTHER int
}

type HasOne interface {
    getOne() int
}

func main() {
    fmt.Println("Hello, playground")

    a := A{1}
    b := B{a, 2}

    fmt.Println(a.ONE)
    fmt.Println(b.ANOTHER)

    takeA(b)
}

func takeA(a HasOne) {

    fmt.Println(a.getOne())
}