タイプアサーション

  • 型変換をすること
  • interface型で受け取ると型の判断ができないため

intger型

パッケージ メイン

 「fmt」をインポート

func  do (i  interface {}){ 
    //タイプアサーションインターフェイス型だとそのまま利用できないのでintergerへ変換する必要がある
    ii  :=  i 。(int )
    ii  * =  2 
    fmt 。Println (ii )
}

func  main (){ 
    var  i  interface {}  =  10 
    do (i )
}

出力

20

文字列型

パッケージ メイン

 「fmt」をインポート

func  do (s  interface {}){ 
    ss  :=  s 。(文字列)
    fmt 。Println (ss  +  "!" )
}

func  main (){ 
    do ("Mike" )
}
マイク!

スイッチタイプ

パッケージ メイン

 「fmt」をインポート

func  do (i  interface {}){ 
    //いろいろな型に対応できるようにできるswitch type 
    switch  v  :=  i 。(type ){ 
    // intgerの場合
    case  int :
        fmt 。Println (v  *  2 )
    // stringの場合
    case  string :
        fmt 。Println (v  +  "!" )
  //それ以外の
    デフォルト:
        fmt 。Println ("%T%nがわからない" 、 v )
    } 
}

func  main (){ 
    // string 
    do ("Mike" )
    // integer 
    do (10 )
    // boolean 
    do (true )
}
マイク!
20
%T%nが本当かわかりません

ささら桁

パッケージ メイン

 「fmt」をインポート

タイプ Person  構造体{ 
    名前 文字列
    Age  int 
}

// String()で出力方法を変えられる
func  (p  Person ) String () string { 
    //名前だけ返す(年齢は
    返さ ない)return fmt 。sprintf ("私の名前は、体積%である" 、 P 。名前)
}

func  main () { 
    mike  :=  Person { "Mike" 、 22 } 
    fmt 。Println (マイク)
}
私の名前はマイクです

カスタムエラー

パッケージ メイン

インポート (
    "fmt" 
)

タイプ UserNotFound  構造体{ 
    ユーザー名 文字列
}

func  (e  * UserNotFound ) Error () string { 
    return  fmt 。sprintf ("ユーザーが見つかりません:%のV" 、 E 。ユーザー名)
}

func  myFunc () error { 
    // 
    何かエラーが出たらok  :=  false 
    // okならnil 
    if  ok  { 
        return  nil 
    } 
    // 
    ユーザーが閲覧なかったらreturn  &UserNotFound { Username : "Mike" } 
}

func  main () { 
    if  err  :=  myFunc ();  err  !=  nil  { 
        fmt 。Println (err )
    } 
}
ユーザーが見つかりません:Mike

ゴルーチン

  • 並列処理
パッケージ メイン

インポート (
    "fmt" 
    "sync" 
)

FUNCの ゴルーチン(S  ストリング、 WG  * 同期。WaitGroup ){ 
    用 I  :=  0 ;  i  <  5 ;  i ++ { 
        // time.Sleep(100 * time.Millisecond)
        fmt 。Println (s )
    } 
    wg 。完了()
}

func  normal (s  string ){ 
    for  i  :=  0 ;  i  <  5 ;  i ++ { 
        // time.Sleep(100 * time.Millisecond)
        fmt 。Println (s )
    } 
}

func  main (){ 
    var  wg  sync 。WaitGroup 
    wg 。Add (1 )
    //並列処理
    go  goroutine ("world" 、 &wg )
    normal ("hello" )
    // time.Sleep(2000 * time.Millisecond)
    wg 。待機()
}
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
世界
世界
世界
世界
世界

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)