Go言語課外学習の理解

4402 ワード

1独立して実行される実行可能ファイルについてはpackage mainである必要があります
2 Go言語で複数の文を1行に書きたい場合は、「;隔てる.
3つ以上のvar宣言はグループ化できます.constとimportは同じように許可されています.カッコ()を使用するには、次のようにします.
 
import (
   "fmt"
   "reflect"
)
const (
   A string = "bac"   //     
   B  int = 2         //     
)
const (
   C = 12             //     
   D = "122"          //     
)
var (
   x int
   b bool
)

4複数の変数を同時に宣言します.
a , b := "12",12    // a string  ,b int  

5 Go言語でintタイプはハードウェア条件により長さを決定し,32ビットマシンでは32ビット,64ビットでは64ビットである.uint同様の場合.長さを明確にするには、int 8、int 16、int 32、int 64、byte、uint 8、uint 16、uint 32、uint 64を使用します.
6特にintとint 32,int 64は同じタイプではなく、以下のように注意する.
var a int
var b int32
a = 15
b = a + 14    // illegal , cannot use a + 14 (type int) as type int32 in assignment
c := 15       // c        int    

7文字列は、Go言語ではUTF-8の二重引用符(")で囲まれた文字列です.一重引用符(')で1文字を表します.
8文字列は可変変数であり、割り当て値が変更されないと
9行以上の文字列には、2つの方法があります.
  • 二重引用符にプラス記号を付けます.プラス記号は1行の一番後ろの
  • を付けなければなりません.
         s := "abcddf"    // illegal,       
              + "dddd"
         s2 := "abcd" +   // ok
              "dddd"
  • は、元の文字列番号として反引用符(`)を使用しますが、s 3は
  • を2行表示する改行文字を含みます.
        s3 := `dafdfdsf
               dsfdfsd`

    10 runeはint 32の別名でUTF-8で符号化されている.文字列内の文字を巡回する必要がある場合.各バイト(US ASCIIを使用して文字列を符号化する場合にのみ文字と等価であり、Go言語には存在しない)をループすることができるため、実際の文字を得るにはruneタイプを使用する必要があります.
    11 Goは複数をサポートし、complex 128(64ビット虚数部分)、complex 64(32ビット虚数部分)があり、以下のようになる.
    var c complex64 = 5+5i
    fmt.Printf("Value is: %v",c)

    出力Value is:(5+5 i)
    12 Go言語では演算子のリロードと関数のリロードはサポートされていません
    13 Go言語の予約字: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
    14 goto使用例
    func myfunc(){
       i := 0
       Here:
          fmt.Println(i)
          i++
          goto Here
    }

    15 Go言語のforループには3つの形式があります
  • for init ; condition ; post{}//Cのforと同じ
  • for condition{}//whileループと同じ
  • for{}//とCのfor(;;)同じ
  • 例は以下の通り
    sum := 0
    for i:=0;i<10;i++{
       sum += i
    }
    fmt.Println(sum," ,i = ",i)   //    ,i       for   ,i for        i      
    j := 0
    for j<10 {      //    for    ,  while  
       j ++
       fmt.Println(j)
    }
    for i,j:=0,10;i

    16 breakの後にラベルを指定し、どのループが終了するかをラベルで決定できます.
    J:
       for i:=0;i<10;i++{
          for j:=0;j<10;j++{
             if j > 5{
                break J      //     J,   j  
             }
             fmt.Println(j)
          }
       }

    17 rangeはサイクルに使用できます.slice、array、string、map、channelでいいです.rangeは反復器で、呼び出されたときにループされたコンテンツからキー値ペアが返されます.
    list := []string{"a","b","c"}
    for k,v := range list {
       fmt.Println("string ",v," is at position ",k)
    }

    しゅつりょく
            string  a  is at position  0         string  b  is at position  1         string  c  is at position  2
    18 Go言語のswitchは非常に柔軟で、式は定数や整数ではなく、式がなくてもよい.マッチングに失敗した後に自動的に下に試行することはありませんが、fallthroughを使用して実行できます.
    c := '3'
    switch  {       //        
    case '0' <= c && c <= '1':
       // todo
    case '1' <= c:
       // todo
    }
    switch c {
    case '1','2','3':    //            
       //todo
    default:
       //todo
    }

    19配列は値タイプで、1つの配列を別の配列に割り当てると、すべての要素がコピーされます.関数内に配列を渡すと、配列のポインタではなく配列のコピーが生成されます.
    a := [3]int{1,2,3}
    b := [...]int{4,5,6}
    c := [2][2]int{[2]int{1,2},[2]int{3,4}}
    d := [2][2]int{[...]int{1,2},[...]int{3,4}}
    f := [2][2]int{{1,2},{3,2}}
    var e [3]int

    20配列スライスsliceは、参照タイプであり、配列スライスを作成するには3つの方法があります.
    s1 := make([]int,10)   
    s2 := []int{9,1}
    a := [100]int{}
    s3 := a[0:10]

    21配列スライス拡張、append()またはcopy()を使用できます.copy()は、ソース配列スライスsrcからターゲット配列スライスdstにコピーされ、コピーされた要素の個数、すなわちlen(src)とlen(dst)の最小値を返します.
    s0 := []int{0,0}
    s1 := append(s0,2)    // s1 = []int{0,0,2}
    s2 := append(s1,3,5,7)  // s2 = []int{0,0,2,3,5,7}
    s3 := append(s2,s0...)   // s3 = []int{0,0,2,3,5,7,0,0}
    
    var a = [...]int{0,1,2,3,4,5,6}
    var s = make([]int,6)
    n1 := copy(s,a[0:])    // n1=6,s=[]int{0,1,2,3,4,5} 
    n2 := copy(s,s[2:])    // n2=4,s=[]int{2,3,4,5,4,5}