¿Cómo acceder a los campos de la interfaz en Golang?

Las interfaces de idioma de Go son diferentes de otros idiomas. En el lenguaje Go, la interfaz es un tipo personalizado que se utiliza para especificar un conjunto de una o más firmas de métodos y la interfaz es abstracta, por lo que no puede crear una instancia de la interfaz. Pero se le permite crear una variable de un tipo de interfaz y esta variable se puede asignar con un valor de tipo concreto que tenga los métodos que requiere la interfaz. O, en otras palabras, la interfaz es una colección de métodos y también es un tipo personalizado. Para leer más sobre las interfaces, consulte el artículo Interfaz en Golang

Hay dos estructuras y una interfaz. Una estructura es para los detalles del curso gfg y otra estructura es para los detalles del concurso. Una interfaz tiene el método get_name que devolverá los nombres del curso y el concurso. Con la ayuda de la interfaz, accederemos a la variable de la estructura ya que no queremos acceder a la variable de la estructura desde el exterior.

Ejemplo 1: Este programa tomará 2 entradas.

Go

// Golang program to access the interface fields
package main
 
import "fmt"
 
// Declare course structure
type Course struct {
    name string
}
 
// Declare contest structure
type Contest struct {
    name string
}
 
// Declare interface
type Name interface {
    get_name() string
}
 
// get_name function for course
func (a Course) get_name() string {
 
    return a.name
 
}
 
// get_name function for contest
func (b Contest) get_name() string {
 
    return b.name
 
}
 
// Compare course and contest name.
// Name is interface type
func name_compare(course, contest Name) bool {
 
    return contest.get_name() == course.get_name();
 
}
 
func main() {
 
    var course_name, contest_name string
 
    // Get the course name from user
    fmt.Println("Enter course name: ")
    fmt.Scan(&course_name)
 
    // Get the contest's name from user
    fmt.Println("Enter contest name: ")
    fmt.Scan(&contest_name)
 
    // Create structure of course
    course := Course{course_name}
 
    // Create structure of contest
    contest := Contest{contest_name}
 
    fmt.Print("Is same subjects in course and contest: ")
 
    // Call interface function to compare names
    fmt.Print(name_compare(course, contest))
}

Producción: 

Enter course name: DBMS
Enter contest name: DBMS
Is same subjects in course and contest: true

Ejemplo 2: Este programa tomará 2 entradas.

Go

// Golang program to access the interface fields
package main
 
import "fmt"
 
// Declare courseprice structure
type Courseprice struct {
    price int
}
 
// Declare contestprice structure
type Couponprice struct {
    price int
}
 
// Declare interface
type Price interface {
    get_price() int
}
 
// get_price function for Courseprice
func (a Courseprice) get_price() int {
 
    return a.price
 
}
 
// get_price function for Coupon price
func (b Couponprice) get_price() int {
 
    return b.price
 
}
 
// Compare courseprice and Couponprice.
// Price is interface type
func price_compare(courseprice, Couponprice Price) bool {
 
    if courseprice.get_price() <= Couponprice.get_price() {
 
        return true
 
    } else {
 
        return false
 
    }
 
}
 
func main() {
 
    var courseprice, Couponprice int
 
    // Get the courseprice from user
    fmt.Println("Enter course price: ")
    fmt.Scan(&courseprice)
 
    // Get the Couponprice  from user
    fmt.Println("Enter Coupon Price: ")
    fmt.Scan(&Couponprice)
 
    // Create structure of courseprice
    course := Courseprice{courseprice}
 
    // Create structure of Couponprice
    Coupon := Couponprice{Couponprice}
 
    fmt.Print("Is the course is free: ")
 
    // Call interface function to compare price
    fmt.Print(price_compare(course, Coupon))
}

Producción: 

Enter course price: 1000
Enter Coupon Price: 700
Is the course is free: false

Publicación traducida automáticamente

Artículo escrito por cse1604310056 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *