Goの学習日記

30895 ワード

1.ダウンロードインストールgo
ダウンロードアドレス
2.通常の印刷
メイン関数のパッケージ名はmainでなければなりません..
package main
import "fmt"

fuc main(){//go {       ,c++      
   fmt.print("hello world")//     
}

3.宣言変数の定義
go宣言された変数が存在しないのに使用されていない変数
つまり、単独でこのような言葉を書くと、彼が間違っていることに気づきます.
var a int = 1

この変数を使用して、印刷するだけで、エラーを解決する必要があります.(びっくりしました)
グローバル変数はこのルールを無視するのを忘れるところだった...
変数を定義するいくつかの方法は、ここでは特に説明する必要があります.Goにはcharタイプがありません!!!
var a int = 1
var b,c int =2,3
d,e := 4,5//          
//         ,:      ,       
e:=4//  
e=4//   

4.定数Const,iota
constは言いたくありませんが、主にiotaという特殊な定数で、constキーワードが表示されると0(内部)にリセットされ、新しい行ごとにカウンタが1つ追加されます.
おもしろい書き方
const(
	a = iota//0
    b = iota//1
    c = iota//2
)
const(
	a = 1<<iota//1
    b = 3<<iota//6
)

ここでは<
注意:<
5.条件
書き方で注意したいのは、条件判断に括弧がないことです
if a < 20{
    ...
} else{
    ...
}

6.ブランチ
書き方
switch a{
    case v1:
    ...
    case v2:
    ...
    default:
    ...
}

7.サイクル
forだけは本当にいい書き方で、すべての使い方をカバーしています.
// c
for i:=1;i<2;i++{
    ...
}
// while
for condition{
    ...
}
//     
for{
    ...
}

8.関数
書き方
func name(v1,v2   )     {
    return 
} 
//Go       
fuc name(v1,v2, int) (int,int){
    return v1,v2
}

9.配列
宣言と初期化
//  
var a [size] type
//   ,            
var a = [5]int{1,2,3,4,5}

10.ポインタ
これは何も言うことはありませんが、記録してください.
var p *int
a := 1
p = &a
fmt.print(*p,p,&p)
//  
1,a  ,p  

11.構造体
cに似ていることは何も言うことはありませんが、なぜGoが相手に向いていないのかよく分かりません.
type Books struct {
   title string
   author string
   subject string
   book_id int
}

func main() {
   var Book1 Books        /*    Book1   Books    */
   var Book2 Books        /*    Book2   Books    */

   /* book 1    */
   Book1.title = "Go   "
   Book1.author = "asd"
   Book1.subject = "Go     "
   Book1.book_id = 6495407

   /* book 2    */
   Book2.title = "Python   "
   Book2.author = "asd"
   Book2.subject = "Python     "
   Book2.book_id = 6495700

   /*    Book1    */
   fmt.Printf( "Book 1 title : %s
"
, Book1.title) fmt.Printf( "Book 1 author : %s
"
, Book1.author) fmt.Printf( "Book 1 subject : %s
"
, Book1.subject) fmt.Printf( "Book 1 book_id : %d
"
, Book1.book_id) /* Book2 */ fmt.Printf( "Book 2 title : %s
"
, Book2.title) fmt.Printf( "Book 2 author : %s
"
, Book2.author) fmt.Printf( "Book 2 subject : %s
"
, Book2.subject) fmt.Printf( "Book 2 book_id : %d
"
, Book2.book_id) }

12.反復
range経由
nums := []int{2, 3, 4}
	sum := 0
	//    
	for num := range nums {
		sum += num
	}
	fmt.Println("sum:", sum)
	//  map
	kvs := map[string]string{"a": "apple", "b": "banana"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s
"
, k, v) }

13. make
この方法は単独で話す必要がある.
make(  ,size,  )
//       1,     1,         
a := make([]int,1,1)
//  map     ,   make   map    map,   ,      
b := make(map[string]string)
//        ,   
b["abc"]="bca"
//     1,          ,         append  ,         
a[0]=1
a = append(a, 2)

14.タイプ変換
var sum int = 17
var count int = 5
var mean float32   
mean = float32(sum)/float32(count)
fmt.Printf("mean    : %f
"
,mean)

15.インタフェース
Javaから見ると本当につらいと言わざるを得ませんが、何度も見てみましょう.
type Phone interface {
    call()
}

type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
    fmt.Println("I am Nokia, I can call you!")
}

type IPhone struct {
}

func (iPhone IPhone) call() {
    fmt.Println("I am iPhone, I can call you!")
}

func main() {
    var phone Phone

    phone = new(NokiaPhone)
    phone.call()

    phone = new(IPhone)
    phone.call()

}

16.同時
goスレッドを開くのは本当に簡単です
import (
        "fmt"
        "time"
)

func say(s string) {
        for i := 0; i < 5; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Println(s)
        }
}

func main() {
        go say("world")
        say("hello")
}

チャンネルこれは強すぎる
ch  v    //   v       ch
v := ch  //   ch     
           //       v
//       
ch := make(chan int)

≪インスタンス|Instance|emdw≫
package main

import "fmt"

func sum(s []int, c chan int) {
        sum := 0
        for _, v := range s {
                sum += v
        }
        c  sum //   sum       c
}

func main() {
        s := []int{7, 2, 8, -9, 4, 0}

        c := make(chan int)
        go sum(s[:len(s)/2], c)
        go sum(s[len(s)/2:], c)
        x, y := c, c //     c    

        fmt.Println(x, y, x+y)
}

goはchannelにバッファを設定しました
makeの2番目のパラメータでバッファのサイズを設定できます
ch := make(chan int, 100)

バッファ付きチャネルは、送信側のデータ送信と受信側のデータ取得を非同期状態にすることを可能にする.すなわち、送信側が送信したデータはバッファ内に置くことができ、受信側がデータを取得するのを待つことができ、すぐに受信側がデータを取得する必要はない.
しかし、バッファのサイズが限られているため、受信側がデータを受信しなければならない.そうしないと、バッファがいっぱいになると、データ送信側はデータを送信できなくなる.
注:チャネルにバッファがない場合、送信者は受信者がチャネルから値を受信するまでブロックします.チャネルバンドがバッファリングされると、送信者は、送信された値がバッファ内にコピーされるまでブロックする.バッファが満たされている場合は、受信者が値を取得するまで待つ必要があることを意味します.受信者は、値が受信できるまでブロックされます.
クッションのない欠点
読み取り側のみで書き込み側がない場合、「読み取り側」はブロックされます.書き込み側のみで読み取り側がない場合、「書き込み側」はブロックされます.
≪インスタンス|Instance|emdw≫
func main() {
    //                        
        //       2
        ch := make(chan int, 2)

        //    ch        ,            
        //               
        ch  1
        ch  2

        //        
        fmt.Println(ch)
        fmt.Println(ch)
}

チャンネルを巡回して閉じる
close(c)//    
//    
for i := range c{
    ...
}