Interface(型アサーションと型switch)

インターフェースの型を動的に判定したいとき「型アサーション」と「型Switch」を活用できます。ここでは簡単な例で動作確認してみます。

型アサーション( t, ok := i.(T) )

t, ok := i.(T) の形式で利用できます。

アサーションに成功した場合 ok=true となり t に値が代入されます。

以下、実行例です。

package main

import (
	"fmt"
)

type SampleInterface interface {
	Print()
}

type SampleA struct {
	Name string
}

func (s SampleA) Print() {
	fmt.Println("SampleA")
}

func (s SampleA) PrintOriginal() {
	fmt.Println("SampleA Original")
}

type SampleB struct {
	Message string
}

func (s SampleB) Print() {
	fmt.Println("SampleB")
}

func test(i SampleInterface) {
	sa, ok := i.(SampleA)
	fmt.Printf("[sa: %v]\t[ok: %v]\n", sa, ok)

	sb, ok := i.(SampleB)
	fmt.Printf("[sb: %v]\t[ok: %v]\n", sb, ok)

	if sa, ok := i.(SampleA); ok {
		sa.PrintOriginal()
	}
}

func main() {
	fmt.Println("------------------------")
	sa := SampleA{Name: "xxx"}
	test(sa)
	fmt.Println("------------------------")
	sb := SampleB{Message: "yyy"}
	test(sb)
}

以下、実行結果です。

------------------------
[sa: {xxx}]     [ok: true]
[sb: {}]        [ok: false]
SampleA Original
------------------------
[sa: {}]        [ok: false]
[sb: {yyy}]     [ok: true]

型Switch( switch v := i.(type) )

switch v := i.(type) の形式で利用できます。

以下、実行例です。

package main

import (
	"fmt"
)

type SampleInterface interface {
	Print()
}

type SampleA struct {
	Name string
}

func (s SampleA) Print() {
	fmt.Println("SampleA")
}

type SampleB struct {
	Message string
}

func (s SampleB) Print() {
	fmt.Println("SampleB")
}

func test(i SampleInterface) {
	switch v := i.(type) {
	case SampleA:
		fmt.Printf("SampleA[%T] value[%v]\n", v, v.Name)
	case SampleB:
		fmt.Printf("SampleB[%T] value[%v]\n", v, v.Message)
	default:
		fmt.Print("default")
	}
}

func main() {
	fmt.Println("------------------------")
	sa := SampleA{Name: "xxx"}
	test(sa)
	fmt.Println("------------------------")
	sb := SampleB{Message: "yyy"}
	test(sb)
}

以下、実行結果です。

------------------------
SampleA[main.SampleA] value[xxx]
------------------------
SampleB[main.SampleB] value[yyy]

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。