ホームページ  >  記事  >  ウェブフロントエンド  >  囲碁要素のキーワードが見つかる - ちゃんチャンネル

囲碁要素のキーワードが見つかる - ちゃんチャンネル

坏嘻嘻
坏嘻嘻オリジナル
2018-09-14 10:24:082069ブラウズ

HTML 検証は HTML 検証を指します。これは、HTML ドキュメントを分析し、標準の HTML ルールと比較してエラーや非標準コードをマークするプロセスです。 Web ページは HTML を使用して表示され、HTML 自体も HTML 仕様をルールおよび標準として採用しています。複数のブラウザ標準にわたって HTML コードを検証します。

chan

chan はチャネルとも呼ばれ、形式はパイプに似ており、コンテンツは一方の端から送信され、もう一方の端から読み出されます。以下にチャネルを定義する方法を説明します。

var 变量名 chan dataType

チャネルを定義するときは、データ型を指定する必要があります。これは、指定されたデータ型の変数のみがチャネルを通過できることを意味します。

チャネルの初期化

golang でチャネル タイプ変数を初期化する場合、チャネルは 2 つの状況に分けられます。1 つはバッファリングされたチャネル、もう 1 つはバッファリングされていないチャネルです。
次の 2 つの状況における初期化メソッドを紹介します。

// 初始化不带缓冲的通道,通道中数据类型是intvar ch1 = make(chan int)// 初始化带10个缓冲的通道,通道中数据类型是stringvar ch2 = make(chan string,10)

別の記述方法は、チャネルを定義して初期化することです (

// 定义通道,并给通道初始化8个缓冲ch3 := make(chan int ,8)// 定义通道,并初始化为不带缓冲通道ch4 := make(chan string)

チャネル割り当て#)

## チャネルへの読み取りと書き込みの両方がブロッキング状態になる可能性があります。

  1. バッファされていないチャネルは書き込み時にブロックされます。ブロックはチャネル内の情報が読み取られるまで終了しません。

  2. バッファリングされたチャネルの場合、情報がチャネルに書き込まれるたびに、チャネルの長さは 1 ずつ増加します。チャネルから情報が正常に読み取られるたびに、チャネルの長さは 1 ずつ増加します。 1減少しました。チャネル長がチャネル バッファ長と等しい場合、チャネルに情報を書き込み続けるとプログラムがブロックされます。チャネル長がチャネル バッファ長より小さい場合、チャネルに情報を書き込んでもブロックは発生しません。チャネル長が 5 の場合、6 回目にチャネルに情報を書き込むと、チャネルが読み取られないときにプログラムがブロックされます。

チャネル書き込みの構文形式は次のとおりです:

var ch = make(chan string,10)// 将字符串”hello"写入到通道中,通道长度加1ch <- "hello"

チャネルの読み取り

チャネルは空です

1. チャネルが閉じられていない場合、プログラムはブロッキング状態に入り、チャネルに情報が書き込まれるまで待機します
2. チャネルはクローズされており、ブロックされません。たとえば、チャネルが chan int の場合、戻り値は 0 になります。文字列の場合、戻り値は空です。
チャンネルは空ではありません
1. チャネルが閉じられていないため、チャネルから情報を一度読み取ります。読み取りが完了したら、実行を続行します。 2. チャネルが閉じられています。読み取りが完了したら、チャネルの読み取り操作に進みます。

val,ok := <-ch

アサーションを使用して、 channel の値は、チャネルにまだコンテンツがあるかどうかを確認し、チャネルに情報がなく、チャネルが閉じられているかどうかを判断します。チャネルが閉じられていない場合、ok 値は false です。しかし、チャネルに情報がない場合、プログラムはブロックします。チャネルにコンテンツがある場合、ok 値は true です。

アサーションを使用せずにチャネルを読み取る別の方法

val := <-ch

チャネルの書き込みと読み取り

バッファリングされていないチャネルのサンプルの読み取り方法:

package mainimport (    "fmt")func main() {    // 定义一个不带缓冲的通道,通道中数据类型是int
    var c = make(chan int)    // 开启一个携程,读取通道中的内容
    go func() {
        fmt.Println("写入信息是:", <-c)
    }()    // 向通道中写入数据
    c <- 1}
出力結果:
写入信息是: 1

バッファリングされたチャネルを読み書きする場合、チャネル内のデータ長がバッファ長を超えない限り、ブロッキングは発生しませんが、バッファリングされたチャネルを読み取る場合は、バッファリングされたチャネルの場合、チャネルにコンテンツがない場合でも、プログラムはブロック状態になります。したがって、バッファされたチャネルは書き込みのみに影響します。以下に例を示します:

package mainimport (    "fmt")func main() {    var c = make(chan int, 3)
    c <- 1
    c <- 2
    c <- 3
    //c <- 4
    fmt.Println("end")
}

出力情報は次のとおりです:

end

3 つのバッファを持つチャネルにコンテンツを書き込む場合、3 回しか書き込まれないため、チャネルの長さは正確に等しくなります。 to バッファの長さは、プログラムがブロックされていないことを意味します。c

コルーチン通信

次のコード例に示すように、チャネル タイプ変数は基本的にアドレスです。

package mainimport (    "fmt")func main() {    var c = make(chan int, 3)
    fmt.Println(c)
}
出力結果:
0xc042072080

したがって、チャネル型変数がパラメータとして関数に渡されると、チャネル内の値を関数内で直接変更できます。 chan 型変数はアドレスですが、golang では値演算子 (*) を使用して chan 型変数を操作することはできません。ただし、最初に chan 型変数に対してアドレス演算子 (&) を使用し、次に値演算子 (*) を使用した場合でも、この操作メソッドは通常どおり実行できますが、目的が関数呼び出しでない限り、あまり意味がありません。 chan タイプの変数を再定義して、元の変数を置き換えます。

chan のこれらの機能により、コルーチン間の同期機能を効果的に実現できます。バッファなしチャネルはゼロトレランス待機であり、強制的な同期を実現できます。バッファありチャネルは一定量の許容待機で、一定の時間差を許容する同期を実現できます。

コルーチン間の通信の簡単な例:

package mainimport (    "fmt"
    "time")func main() {    var c = make(chan int)    go func() {
        fmt.Println("待命模式:")        // 读取通道时产生阻塞,等待其他协程向通道写入信息
        fmt.Println("命令代码是:", <-c)
    }()    go func() {        // 延时3秒,向通道中写入信息
        time.Sleep(time.Second * 3)
        fmt.Println("发送命令:")
        c <- 8
        close(c)
    }()
    time.Sleep(time.Second * 5)
    fmt.Println("执行完成")
}

出力情報:

待命模式:
发送命令:
命令代码是: 8
执行完成

関連する推奨事項:

HTML validate HTML validation_HTML /Xhtml_Webページ制作

HTMLスキル編集_CSS/HTML

以上が囲碁要素のキーワードが見つかる - ちゃんチャンネルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。