m_shige1979のささやかな抵抗と欲望の日々

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

go言語の学習:typeでインターフェースを定義

概要

interface自体はstructを利用してする感じと認識している
構造体とかとなんかごっちゃになっていてJavaのクラスとかと勝手が異なるので混乱している

そもそもstringやintにメソッドは付与できるのか?

type data1 string
type data2 int

こんな感じで定義するらしい
関数?メソッド?を入れたい場合は構造体でクラスを定義したときと同じ感じでいける

サンプル

package main

import (
	"fmt"
)

func main() {
	fmt.Println("start")

	var a data1
	a = "aaaaaaa"
	a.test1()
	a.test2()
	a.clear()
	fmt.Println("sample1:" + a)

	var b data2
	b = 50
	b.add()
	fmt.Printf("sample2:%d\n", b)

	fmt.Println("end")
}

// dataというインターフェースの定義
type data1 string
type data2 int

// サンプルメソッド
func(c *data1) test1() {
	fmt.Println("test1:" + *c)
}

// サンプルメソッド
func(c *data1) test2() {
	fmt.Println("test2: [" + *c + "]")
}

// サンプルメソッド
func(c *data1) clear() {
	*c = ""
}

// サンプルメソッド
func (c *data2) add() {
	*c *= 100
}

インターフェースという考えがうまく理解できていないのでこのような
記載はあまりできなかった(´・ω・`)

まとめ

typeを使用してインターフェース型として定義すれば
string、intでメソッドを付与できる
わざわざ構造体を定義したくない場合はこちらで対応可能