Go学習の道(一)変数、定数、データ型

4912 ワード

Goのテストファイルの書き方:1、ソースファイルは_test末尾:xxx_test.go 2、試験方法名はTestで始まる:func TestXXX(t*testing.T){...}
Goの25個のキーワードまたはリザーブワード
break
default
func
interface
select
case
defer
go
map
struct
chan
else
goto
package
switch
const
fallthrough
if
range
type
continue
for
import
return
var
Goの36個の事前定義識別子
append
bool
byte
cap
close
complex
complex64
complex128
uint16
copy
false
float32
float64
imag
int
int8
int16
uint32
int 32
int64
iota
len
make
new
nil
panic
uint64
print
println
real
recover
string
true
uint
uint8
uintptr

Goのデータ型

  • ブール型
  • 数値タイプ
  • 整数型
  • uint 8符号なし8ビット整数型(0から255)
  • uint 16符号なし16ビット整数型(0から65535)
  • uint 32符号なし32ビット整数型(0から4294967295)
  • uint 64符号なし64ビット整数型(0から18446744073709551615)
  • int 8符号8ビット整数(-128~127)
  • int 16符号16ビット整数(-32768~32767)
  • int 32符号32ビット整数(-2114748648~2147483647)
  • int 64符号64ビット整数(-9223372036854775807~923372036854775807)
  • 浮動小数点型
  • float 32 IEEE-7554 32ビット浮動小数点型数
  • float 64 IEEE-7554 64ビット浮動小数点型数
  • complex 64 32ビット実数と虚数
  • complex 128 64ビット実数と虚数
  • その他の数値タイプ
  • byte類似uint 8
  • rune類似int 32
  • uint 32または64ビット
  • int uintと同じサイズ
  • uintptr符号なし整数は、ポインタ
  • を格納するために使用される.

  • 文字列タイプ
  • 派生タイプ
  • ポインタタイプ
  • 配列タイプ
  • 構造型(struct)
  • チャネルタイプ
  • 関数タイプ
  • スライスタイプ
  • インタフェースタイプ
  • Mapタイプ

  • Goと他の主な言語の違い
  • 賦値は、自動タイプ推定
  • を行うことができる.
  • は、1つの付与文において複数の変数を同時に付与することができる
  • .

    変数宣言方法:

      //     var     =  
          var a int = 1  
          var b int = 1
        //        
        var (
            a int =1
            b int = 1
      )
        
      //      go , Python 
      a :=1
      b :=1
      a,b,c := 1,2,"str"
    

    小さなdemoフィボナ粘りを実現
      package main
      import (
        "fmt"
        "testing"
      )
      func TestFibList(t *testing.T){
        var a int = 1
        var b int = 1
        fmt.Println(a)
        for i :=0; i < 5; i++{
          fmt.Println(" ",b)
          tmp := a
          a = b
          b = tmp + a
         }
        fmt.Println()
      }
    

    2つの変数の値を交換
    func TestExchange(t *testing.T){
      a := 1
      b := 1
      tmp := a
      a = b
      b = tmp  
    }
    //  ( )
    a,b = b,a 
    

    _ 実際には変数だけを書くので、彼の値を得ることはできません.これは、Go言語で宣言されたすべての変数を使用する必要がありますが、1つの関数から得られたすべての戻り値を使用する必要がない場合があります.
    package main
    import "fmt"
    func main(){
      numb,_,str1 := numbers()
      fmt.Println(numb,str1)   //  _ 
    }
    
    func numbers()(int,int,string){     //  
      a,b,c := 1,2,"str"
      return a,b,c
    }
    //  :
    2 str
    

    定数


    定数の定義形式:
    const identifier [type] = value
    const a string = "abc"    //  
    const b = "abc"    //  
    //  
    const name1,name2 = "abc","ace"
    

    定数名は一般的に全大文字で栗を挙げるのがデフォルトです.
    package main
    import "fmt"
    func main(){
      const LENGTH int = 10
      const WIDTH int = 5
      var area int
      const a,b,c = 1, false, "str"    //  
      area = LENGTH * WIDTH
      fmt.Printf("  : %d", area)
      println()
      println(a,b,c)
    }
    //  
      : 50
    1 false str
    

    iota


    iota特殊定数は、コンパイラによって変更可能な定数iotaがconstキーワードが表示されると0にリセットされると考えられます(このリセットはconst内部の最初の行の前にリセットされ、他の行であればconstの7番目の数のように回復し、iotaが再び現れると6に回復します).constにロー定数宣言が追加されるたびにiotaがカウントされます(iotaはconst文ブロックのローインデックスとして理解できます).
    //  
    const(
      a = iota
      b = iota
      c = iota
    )
    //  
    const(
      a = iota
      b
      c
    )
    //  :
    a = 0, b = 1, c = 2
    

    栗を挙げます.
    package main
    import "fmt"
    func main(){
      const(
        a = iota   //   0 
        b
        c
        d = "ha"   //  , iota , iota +1
        e             // "ha" iota+=1
        f = 100    //   iota+=1
        g             // 100 iota+=1
        h = iota   // iota  
        i
      )
      fmt.Println(a,b,c,d,e,f,g,h,i)
    }
    

    Goは暗黙型変換をサポートしていません
    //  
    package main
    import "testing"
    func TestImplicit(t *testing.T){
      var a int32 = 1
      var b int64
      b = a
      t.Log(a,b)
    }
    //  
    package main
    import "testing"
    func TestImplicit(t *testing.T){
      var a int32 = 1
      var b int64
      b = int64(a)
      t.Log(a,b)
    }
    //  
    package main
    import "testing"
    type MyInt int64        //  
    func TestImplicit(t *testing.T){
      var a int32 = 1
      var b int64
      b = int64(a)
      var c MyInt
      c = MyInt(a)     //  
      t.Log(a,b,c)
    }
    
    string int: 
    int, err := strconv.Atoi(string)
    string int64: 
    int64, err := strconv.ParseInt(string, 10, 64)
    int string: 
    string := strconv.Itoa(int)
    int64 string: 
    string := strconv.FormatInt(int64,10)