経験豊富な開発者のための Golang - パート II


いらっしゃいませ、



これは Golang チュートリアル シリーズの第 2 部です.第 1 部をチェックアウトしていない場合は、ぜひチェックしてください.

中断したところから続けましょう...

Go のプリミティブ データ型




構文:



var variableName type = value


以下は、Go のプリミティブ データ型の型です.

ブール値


  • bool 型は、事前に宣言された定数 true または false によって示されるブール値のセットを表します.
  • サポートされている演算子は &&、|| です.と !
  • %t を使用してブール値を出力します.


  • 例:



    var flag bool = !(10 > 0 && 20 < 40)
    fmt.Printf("%t\n", flag)  // false
    


    数値


  • 数値型は、整数値または浮動小数点値のセットを表します.
  • アーキテクチャ依存型は、アーキテクチャに基づいてサイズを決定します.アーキテクチャに依存しない型は固定サイズです.
  • float 型はなく、float32 または float64 のみ
  • float32 の精度は小数点以下 7 桁です.
  • float64 の精度は小数点以下 15 桁です.
  • データ型間の暗黙的な型変換はありません.つまり、 int16int32 に割り当てることはできません.これを克服するには、明示的な型変換を行う必要があります.


  • アーキテクチャに依存するタイプ:



    uint     either 32 or 64 bits
    int      same size as uint
    uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value
    




    アーキテクチャに依存しないタイプ:



    uint8       the set of all unsigned  8-bit integers (0 to 255)
    uint16      the set of all unsigned 16-bit integers (0 to 65535)
    uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
    uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)
    
    int8        the set of all signed  8-bit integers (-128 to 127)
    int16       the set of all signed 16-bit integers (-32768 to 32767)
    int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
    int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
    
    float32     the set of all IEEE-754 32-bit floating-point numbers
    float64     the set of all IEEE-754 64-bit floating-point numbers
    




    明示的な型変換:



    var val1 int16 = 32
    var val2 int32 = int32(val1)   // explicit conversion
    


    複素数


  • Go は、アーキテクチャに依存しない複素数を格納する 2 つの新しいデータ型を提供します.
  • 複雑な演算がサポートされています.
  • complex(real, imaginary) 関数を使用して複素数を作成し、real() & imag() 関数を使用して実部と虚部を抽出します.
  • %v を使用して複素数を出力します.

  • complex64   the set of all complex numbers with float32 real and imaginary parts
    complex128  the set of all complex numbers with float64 real and imaginary parts
    




    例:



    var cp1 = complex(1.2, 2.1)
    var cp2 = complex(3.4, 5.8)
    fmt.Println(real(cp1), imag(cp2))  // 1.2  5.8
    fmt.Printf("%v\n", cp1 + cp2)     // (4.6 + 7.9i)
    


    キャラクター


  • 整数型の特殊なケースです.
  • Unicode
  • には \u(4 hex digit) または \U(8 hex digits) を使用します
  • 印刷用のユーザー %c または %U.

  • byte        alias for uint8, for storing ASCII characters
    rune        alias for int32, for storing UTF-8 characters
    




    例:



    var char1 byte = 65           // ASCII 'A'
    var char2 byte = '\x41'       // ASCII 'A'
    var char3 rune = '\u0041'     // Unicode 'A'
    var char4 rune = '\U00101234' // Unicode
    fmt.Printf("%c %U\n", char1, char4)   // A U+1012334
    


    ポインタ


  • ポインタは、メモリ アドレスを格納する変数です.
  • Go ではポインター演算がサポートされていないことを除いて、これは C++ とまったく同じです.
  • ポインタ変数がヒープに格納され、ガベージ コレクトされます.
  • AddressOf(&) および dereference(*) 演算子は C++ と同じように動作します.
  • %p を使用してポインターを出力します.


  • 構文:



    var identifier *type = address
    




    例:



    var num int = 6
    var ptr *int = &num
    fmt.Printf("%p\n", ptr)    // address of num
    
    *ptr = 20                  // changes num to 20
    fmt.Println(num)           // 20
    
    ptr++                      // illegal, pointer arithmetic not supported
    const val = 10
    ptr = &val                 // illegal, why?
    


    See this for why.




  • string は、Java で不変であるのと同じ理由で、Go で不変です.
  • 文字列は、C/C++ のように null で終了しません.
  • インデックス作成とスライスが許可されています.
  • 文字列の長さには len(str) を使用します.
  • 文字列文字のアドレスを取得できません (&str[i] は無効です)
  • 比較演算子がバイトを比較します.
  • 文字列は二重引用符またはバックティックで初期化されます.
  • デフォルトは空の文字列 ("")


  • 例:



    var str string = "Let's Go"
    fmt.Println(len(str))       // 8
    var str2 string = "C:\newfolder\text.txt"
    fmt.Println(str2)     // C:
                          // ewfolder    ext.txt, bcoz escape sequence
    
    var str3 string = `C:\newfolder\text.txt`   // raw string
    fmt.Pritln(str3)     // C:\newfolder\text.txt
    
    




    連結と更新:



    var a = "Hello "
    var b = "world"
    var c = a + b      // Hello world, concatenation
    a += b          // Hello world, update but create new object bcoz immutability
    




    索引付け:



    var str = "hello"
    fmt.Printf("%c\n", str[0]) // h
    str[0] = 'j'             // illegal
    




    スライス:



    var str = "hello"
    fmt.Println(str[1:4])   // ell, index 1-3
    fmt.Println(str[:4])    // hell, index 0-3
    fmt.Println(str[1:])    // ello, index 1-end
    fmt.Println(str[:])     // hello, index 0-end
    
    fmt.Println(str[-1])    // illegal, but legal in Python
    fmt.Println(str[:-1])   // illegal, but legal in Python
    


    文字列変換と関数


  • Go では、文字列変換と文字列関数に使用できるパッケージが 2 つあります.

  • 文字列変換の場合:


    import "strconv"

    例:



    package "main"
    import "strconv"
    import "fmt"
    
    func main() {
        // string to numeric
        num, _ := strconv.Atoi("1234")
        fmt.Println(num)    // 1234 - int
        fval, _ := strconv.ParseFloat("3.46", 64)  // (str, floatSize)
        fmt.Println(fval)   // 3.46 - float64
        num2, _ := strconv.ParseInt("123", 10, 64) // (str, base, intSize)
        fmt.Println(num2)   // 123 - int64
    
        // numeric to string
        str1 := strconv.Itoa(789)
        fmt.Println(str1)    // 789 - string
        str2 := strconv.FormatFloat(3.45, 'f', -1, 32)
        fmt.Println(str2)    // 3.45 - string
        str3 := strconv.FormatInt(1234, 10)
        fmt.Println(str3)    // 1234 - string
    }
    


    文字列関数の場合:


    import "strings"

    便利な機能:



    func Contains(s, substr string) bool
    func Count(s, sep string) int
    func HasPrefix(s, prefix string) bool
    func HasSuffix(s, suffix string) bool
    func Index(s, sep string) int
    func Join(a []string, sep string) string
    func LastIndex(s, sep string) int
    func Repeat(s string, count int) string
    func Replace(s, old, new string, n int) string
    func Split(s, sep string) []string
    func ToLower(s string) string
    func ToUpper(s string) string
    func Trim(s string, cutset string) string
    


    これで、このチュートリアルの第 2 部は終了です.次に、Golang での制御構造があります.近日公開...