0
0

More than 3 years have passed since last update.

[Go言語]構造体の型入力で処理を分ける

Posted at

はじめに

go言語でintefaceを使えば、C言語などのポインタ渡しに似た処理を行うことができます。
そのやり方について、覚書の意味で記載します。

ソースコード

本資料では、入力した構造体の型別で別の処理を行うように関数を作ってプログラムをします。
また、行列にした構造体で複数にわたって異なる構造体が入っていた時の処理別方法についても関数で作ってみます。

maing.go
package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name string
    Age  string
    Sex  string
}
type User2 struct {
    Name string
    Age  string
    Sex  string
}
type TextBord struct {
    Name string
    Text string
}
//個別処理
func Output(v interface{}) {
    switch reflect.TypeOf(v) {
    case reflect.TypeOf(User{}):
        fmt.Println("Userの型")
    case reflect.TypeOf(User2{}):
        fmt.Println("User2の型")
    case reflect.TypeOf(TextBord{}):
        fmt.Println("TextBordの型")
    default:
        fmt.Println("Other")
    }
}
//配列処理
func Outputs(v []interface{}) {
    for _, tmp := range v {
        Output(tmp)
    }
}

func main() {
    Output(User{})
    Output(User2{})
    Output(TextBord{})
    var tmp []interface{}
    tmp = append(tmp, int(0))
    tmp = append(tmp, User2{})
    tmp = append(tmp, User{})
    Outputs(tmp)
}

実行する以下の結果が得られます。

Userの型
User2の型
TextBordの型
Other
User2の型
Userの型
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0