【Golang】型と型変換

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。
基礎〜応用まで。

package main


import (
    "fmt"
    "strings"
    "strconv"
)




func main() {
    //数値型
    //いろんな種類がある
    //https://golang.org/ref/spec

    //int は自分のPCの32ビットか64ビットの環境依存になる
    //確実に宣言したい場合はint64などにする
    //宣言するビット数で最大値の範囲が異なる。
    var (
        //uint 整数+
        u8  uint8     = 255
        //int 整数 - ~ +
        i8  int8      = 127
        //浮動小数点数
        f32 float32   = 0.2
        //複素数
        c64 complex64 = -5 + 12i

        //上記のように、揃えて書くのがGo推奨
    )
    //表示
    fmt.Println(u8, i8, f32, c64)
    //>>255 127 0.2 (-5+12i)

    //fmt.Printf()で型を調べる
    //%T Type
    //%v Value そのままの値が入る
    //%t boolean
    //その他ドキュメント確認
    fmt.Printf("type=%T value=%v", u8, u8)
    //>>type=uint8 value=2552



    //演算 pythonと同じ
    //変数宣言時にはスペースをあける 1 + 1
    //println 内での式はあけない
    x := 1 + 1
    fmt.Println(x)
    fmt.Println(1+1, 2+2)
    fmt.Println("1 + 1 =", 1+1)
    fmt.Println("10 - 1 =", 10-1)
    fmt.Println("10 / 2 =", 10/2)
    fmt.Println("10 / 3 =", 10/3)
    fmt.Println("10.0 / 3 =", 10.0/3)
    fmt.Println("10 / 3.0 =", 10/3.0)
    fmt.Println("10 % 2 =", 10%2)
    fmt.Println("10 % 3 =", 10%3)
    /*
    2 4
    1 + 1 = 2
    10 - 1 = 9
    10 / 2 = 5
    10 / 3 = 3
    10.0 / 3 = 3.3333333333333335
    10 / 3.0 = 3.3333333333333335
    10 % 2 = 0
    10 % 3 = 1
    */




    //go fmt
    //書式を修正する場合は go fmt --.go
    //実際に修正して書き換える場合は go fmt -w --.go




    //++ --
    x = 0
    fmt.Println(x)
    //>>0

    //1足す
    x++
    fmt.Println(x)
    //>>1

    //-1する
    x--
    fmt.Println(x)
    //>>0





    //shift
    //2進数をずらす。あまり使わない?
    fmt.Println(1 << 0)
    //1
    //1を1回シフト == 2
    fmt.Println(1 << 1)
    //4
    fmt.Println(1 << 2)
    //8
    fmt.Println(1 << 3)


    //###############################################################



    //文字列型
    fmt.Println("Hello World")
    //>>Hello World

    //分割
    fmt.Println("Hello " + "World")
    //>>Hello World



    //1文字目表示 
    //"Hello World"[0]だけでは、アスキーコード
    //なのでstring()で囲む
    fmt.Println(string("Hello World"[0]))
    //>>H


    //文字の置き換え
    var s string = "Hello World"
    //s[0] = "X"はできない
    //Replace 置き換え (どの文字列の,どの文字を、どの文字にする、何個)
    s = strings.Replace(s, "H", "X", 1)

    //コピーを作成するので、元データは変わらないが、
    //上記のように、変数を上書きすることで元データを書き換えられる
    fmt.Println(s)
    //>>Xello World



    //strings.Contains() 第一引数に、第二引数の文字列が含まれているかを判定
    fmt.Println(strings.Contains(s, "World"))
    //>>true



    //バッククォートで囲めばそのまま表示される。
    fmt.Println(`Test
                       Test
Test`)
    /*
    Test
                       Test
Test
    */


    //""を表示したい場合 \"  もしくは``で囲む
    fmt.Println("\"")
    fmt.Println(`"`)
    //>>"
    //>>"





    //###############################################################

    //論理値型
    //宣言
    // var t, f bool = true, false
    t, f := true, false

    //%t でbool型でないと正しく表示しない。厳格にしたい場合使う
    fmt.Printf("%T %v %t\n", t, 1, t)
    fmt.Printf("%T %v %t\n", f, 0, f)
    //>>bool 1 true
    //>>bool 0 false

    //論理演算子
    //&& かつ
    //True
    fmt.Println(true && true)
    //false
    fmt.Println(true && false)
    fmt.Println(false && false)

    //|| もしくは
    //true
    fmt.Println(true || true)
    //true
    fmt.Println(true || false)
    fmt.Println(false || false)

    //! 否定 でなければ
    //false
    fmt.Println(!true)
    //true
    fmt.Println(!false)


    //###############################################################



    //型変換
    //数値型は簡単
    var x2 int = 1
    //float64() 新しいxxに代入
    xx := float64(x2)
    //%f float表記
    fmt.Printf("%T %v %f\n", xx, xx, xx)
    //>>float64 1 1.000000

    var y float64 = 1.2
    //新しいyyに代入
    yy := int(y)
    //%d int表記
    fmt.Printf("%T %v %d\n", yy, yy, yy)
    //>>int 1 1




    //文字列→数値変換
    //文字列型は難しい
    //そのまま変換することはできない
    //Pythonとかならそのままできるが、Goはできない
    var s2 string = "14"

    //Atoi アスキートゥインテジャー
    //strconv.Atoi() アスキー文字をintegerに変換
    //i, _ は返り値が値とerrorと2つある為、片方は_にしている。
    //もしerrならというエラーハンドリングできる。
    //_ にすることで、使われていない変数でのエラーを回避する。
    //こういうエラーはビルドした時に発生するので常に注意する。
    i, _ := strconv.Atoi(s2)
    fmt.Printf("%T %v\n", i, i)
    //>>int 14




    //文字列をバイト配列から文字列に戻して1文字目だけ表示
    h := "Hello World"
    fmt.Println(string(h[0]))
    //>>H




    //数値→文字列変換
    var i3 int=321
    var s3 string
    s3 = strconv.Itoa(i3)
    fmt.Println(s3) 
    //>>321

}

广告
将在 10 秒后关闭
bannerAds