Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to pass field as parameter

i want to pass field as parameter to return value from function

package main

import (
    "fmt"
)

type s struct {
    a int
    b int
}

func c(s s) int {
    var t int
    t = s.a // how to change this to t=s.b just by pass parameter
    return t
}
func main() {
    fmt.Println(c(s{5, 8}))
}

some times i want to make t = s.a and other time i wanted t = s.b to return value 8 the question is how to pass it like parameter

https://play.golang.org/p/JisnrTxF2EY

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You may add a 2nd parameter to signal which field you want, for example:

func c2(s s, field int) int {
    var t int
    switch field {
    case 0:
        t = s.a
    case 1:
        t = s.b
    }
    return t
}

Or a more convenient is to pass the name of the field, and use reflection to get that field:

func c3(s s, fieldName string) int {
    var t int
    t = int(reflect.ValueOf(s).FieldByName(fieldName).Int())
    return t
}

Or you may pass the address of the field, and assign the pointed value:

func c4(f *int) int {
    var t int
    t = *f
    return t
}

Testing the above solutions:

x := s{5, 8}

fmt.Println("c2 with a:", c2(x, 0))
fmt.Println("c2 with b:", c2(x, 1))

fmt.Println("c3 with a:", c3(x, "a"))
fmt.Println("c3 with b:", c3(x, "b"))

fmt.Println("c4 with a:", c4(&x.a))
fmt.Println("c4 with b:", c4(&x.b))

Which will output (try it on the Go Playground):

c2 with a: 5
c2 with b: 8
c3 with a: 5
c3 with b: 8
c4 with a: 5
c4 with b: 8
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading