【Go】go修行11日目タイプアサーションとか

パッケージ メイン
「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 。待機()
}
こんにちは
こんにちは
こんにちは
こんにちは
こんにちは
世界
世界
世界
世界
世界