English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 制御文

Golang ファンクション & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang 異常(Error)

Golang その他の雑多

Go 言語の演算子

演算子はどのプログラミング言語でも基本となります。したがって、演算子を使用しない場合、Go言語の機能は不完全です。演算子は操作数に対して異なる種類の演算を実行することができます。Go言語では、演算子の異なる機能に応じて分類できます:

算術演算子

これらはGo言語の操作数に対して算術/数学運算:

  • 加法: “ +「+」運算子は二つの操作数を足します。例えば、x + y。

  • 減法: “-「-」運算子は二つの操作数を引きます。例えば、x-y。

  • 乘法: /*「*」運算子は二つの操作数を乗じます。例えば、x * y。

  • 除法: //「/」運算子は最初の操作数を第二の操作数で割ります。例えば、x / y。

  • 求模:最初の操作数を第二の操作数で割るとき、'%'運算子は余数を返します。例えば、x%y。

注意: -、+、!、&、*、<-和^も一元運算子と呼ばれるが、一元運算子の優先順位が高い。++和—運算子は文から来ており、それらは式ではありません。したがって、運算子の階層構造には含まれません。

package main
import "fmt"
func main() {
    p := 34
    q := 20
    // 加法
    result1 := p + q
    fmt.Printf("計算結果 p + q = %d", result1)
    // 减法
    result2 := p - q
    fmt.Printf("\n計算結果 p - q = %d", result2)
    // 乘法
    result3 := p * q
    fmt.Printf("\n計算結果 p * q = %d", result3)
    // 除法
    result4 := p / q
    fmt.Printf("\n計算結果 p / q = %d", result4)
    // 求模
    result5 := p % q
    fmt.Printf("\n計算結果 p %% q = %d", result5)
}

出力:

計算結果 p + q = 54
計算結果 p - q = 14
計算結果 p * q = 680
計算結果 p / q = 1
計算結果 p % q = 14

関係演算子

関係演算子は2つの値を比較するために使用されます。一つずつ見てみましょう:

  • 「==」(等しい)演算子は2つの指定された操作数が等しいかどうかを確認します。等しい場合、trueを返します。それ以外の場合、falseを返します。例えば、5 == 5trueを返します。

  • 「!=」(不等的)演算子は2つの指定された操作数が等しいかどうかを確認します。不等しい場合、trueを返します。それ以外の場合、falseを返します。それは'=='演算子の正のブール補完です。例えば、5!= 5falseを返します。

  • 「>」(大きい)演算子は最初の操作数が2番目の操作数以上かどうかを確認します。以上の場合、trueを返します。それ以外の場合、falseを返します。例えば、6> 5trueを返します。

  • 「<」(小さい)演算子は最初の操作数が2番目の操作数以下かどうかを確認します。以下の場合、trueを返します。それ以外の場合、falseを返します。例えば、6 <5falseを返します。

  • 「>=」(大きいかつ等しい)演算子は最初の操作数が2番目の操作数以上かどうかを確認します。以上の場合、trueを返します。それ以外の場合、falseを返します。例えば、5>= 5trueを返します。

  • 「<=」(小さいかつ等しい)演算子は最初の操作数が2番目の操作数以下かどうかを確認します。以下の場合、trueを返します。それ以外の場合、falseを返します。例えば、5 <= 5もtrueを返します。

package main
import "fmt"
func main() {
    p := 34
    q := 20
    // 「==」(等しい)
    result1 := p == q
    fmt.Println(result1)
    // 「!=」(不等的)
    result2 := p != q
    fmt.Println(result2)
    // 「<」(小さい)
    result3 := p < q
    fmt.Println(result3)
    // 「>」(大きい)
    result4 := p > q
    fmt.Println(result4)
    // 「>=」(大きいかつ等しい)
    result5 := p >= q
    fmt.Println(result5)
    // 「<=」(小さいかつ等しい)
    result6 := p <= q
    fmt.Println(result6)
}

出力:

false
true
false
true
true
false

論理演算子

これらは2つ以上の条件を統合するために使用されます/制約、または追加で考慮する元の条件の評価。

  • 論理AND:考慮している2つの条件がどちらも満たされた場合、「&&」演算子はtrueを返します。それ以外の場合、falseを返します。例えば、aとbがどちらも真である場合(つまり非ゼロ)、a && bは真を返します。

  • 論理和: 条件のうち1つ(または2つ)が満たされた場合、「||」演算子はtrueを返します。それ以外の場合、falseを返します。例えば、aまたはbのどちらかが真である場合(つまり非ゼロ)、|| bはtrueを返します。もちろん、aとbがどちらも真である場合、trueを返します。

  • 論理否定: 満足条件に該当しない場合、「!」演算子はtrueを返します。それ以外の場合、falseを返します。例えば、aが偽である場合(つまりa = 0)、!aはtrueを返します。

package main
import "fmt"
func main() {
    var p int = 23
    var q int = 60
    if p != q && p <= q {
        fmt.Println("True")
    }
    if p != q || p <= q {
        fmt.Println("True")
    }
    if !(p == q) {
        fmt.Println("True")
    }
}

出力:

True
True
True

ビット演算子があります。

Go言語では、6ビット演算子は、ビットごとに動作したり逐次操作に使用できます。以下にビット演算子を示します:

  • &(按位与):二つの数字を操作数として用いて、二つの数字の各ビットに対して「と」演算を実行します。二つのビットがどちらも1の場合、ANDの結果が1。

  • | (按位或):二つの数字を操作数として用いて、二つの数字の各ビットに対して「或」演算を実行します。二つのビットのいずれかが1、ORの結果は1。

  • ^(按位XOR):二つの数字を操作数として用いて、二つの数字の各ビットに対してXORを実行します。もし二つのビットが異なる場合、XORの結果は1。

  • <<(左移):二つの数字を取って、最初の操作数のビットを左に移動し、第二の操作数が移動するビット数を決定します。

  • >>(右移):二つの数字を取って、最初の操作数のビットを右に移動し、第二の操作数が移動するビット数を決定します。

  • &^(AND NOT):(按位清除)演算子、この演算子の実際の操作は&(^)演算です。

package main
import "fmt"
func main() {
    p := 134
    q := 320
    // & (AND)
    result1 := p & q
    fmt.Printf("計算結果 p & q = %d", result1)
    // | (OR)
    result2 := p | q
    fmt.Printf("\n計算結果 p | q = %d", result2)
    // ^ (XOR)
    result3 := p ^ q
    fmt.Printf("\n計算結果 p ^ q = %d", result3)
    // << (左移)
    result4 := p << 1
    fmt.Printf("\n計算結果 p << 1 = %d", result4)
    // >> (右移)
    result5 := p >> 1
    fmt.Printf("\n計算結果 p >> 1 = %d", result5)
    // &^ (AND NOT)
    result6 := p &^ q
    fmt.Printf("\n計算結果 p &^ q = %d", result6)
}

出力:

計算結果 p & q = 0
計算結果 p | q = 454
計算結果 p ^ q = 454
計算結果 p << 1 = 268
計算結果 p >> 1 = 67
計算結果 p &^ q = 134

割り当て演算子

変数に値を割り当てるための割り当て演算子です。割り当て演算子の左側の操作数は変数であり、割り当て演算子の右側の操作数は値です。右側の値は左側の変数と同じデータ型を持っている必要があり、そうでない場合、コンパイラはエラーを投げます。以下に示されるように、異なるデータ型の割り当て演算子があります:

  • 「=」(単純代入)これは最も単純な代入演算子です。この演算子は右側の値を左側の変数に割り当てるために使用されます。

  • “ + =(加算代入)この演算子は+「および」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の値に「加算」して、結果を左側の変数に割り当てます。

  • “-=(減算代入)この演算子は-「および」および「=」演算子の組み合わせです。この演算子はまず右側の値から左側の変数の現在の値を「減算」して、結果を左側の変数に割り当てます。

  • “ * =(乗算代入)この演算子は*「および」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の値に「乗算」して、結果を左側の変数に割り当てます。

  • “ / 「=」(除算代入)この演算子は/「および」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の値で「除算」して、結果を左側の変数に割り当てます。

  • 「%=」(模代入)この演算子は「%」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の変数に「乗算」して、結果を左側の変数に割り当てます。

  • 「&=」(ビットでとる代入)この演算子は「&」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の変数と「ビットでとる」して、結果を左側の変数に割り当てます。

  • 「^=」(ビットで異或)この演算子は「^」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の変数と「ビットで異或」して、結果を左側の変数に割り当てます。

  • 「|=」(ビットで或る)この演算子は「|」および「=」演算子の組み合わせです。この演算子はまず左側の変数の現在の値を右側の値「ビットで或る」して、結果を左側の変数に割り当てます。

package main 
    
import "fmt"
    
func main() { 
   var p int = 38
    var q int = 70
       
   // 「=」(単純代入) 
   p = q 
   fmt.Println(p) 
       
   // “+=(加算代入) 
    p += q 
   fmt.Println(p) 
       
   //“-=(減算代入) 
   p-=q 
   fmt.Println(p) 
       
   // “*=(乗算代入) 
   p*= q 
   fmt.Println(p) 
       
   // “/=(除算代入) 
    p /= q 
   fmt.Println(p) 
      
    // 「%=」(求模代入) 
    p %= q 
   fmt.Println(p) 
      
}

出力:

70
140
70
4900
70
0

雑多な演算子

  • &:この演算子は変数のアドレスを返します。

  • *:この演算子は変数へのポインタを提供します。

  • <-:この演算子の名前は受け取りです。チャンネルから値を受け取るために使用されます。

package main 
    
import "fmt"
    
func main() { 
  a := 94
     
//演算子(&)と
//ポインタ間接(*)演算子
  b := &a  
  fmt.Println(*b)  
  *b = 67 
  fmt.Println(a)  
}

出力:

94
67