banner
Pi3

Pi3

记录学习、生活和成长
github
telegram
x
zhihu
email

Go言語入門2:基本文法

Go 言語入門基礎学習ノートの Go 言語の基礎文法データ型

image.png

基礎文法#

Go マーク#

Go プログラムは複数のマークで構成され、キーワード、識別子、定数、文字列、記号であることができます。

行区切り#

Go プログラムでは、一行が一つの文の終了を表します。各文は C 系の他の言語のようにセミコロン ; で終わる必要はなく、これらの作業は Go コンパイラによって自動的に行われます。

複数の文を同じ行に書く場合は、セミコロンで区切る必要がありますが、実際の開発ではこの方法は推奨されません。

コメント#

// 単一行コメント
/*
    複数行コメント / ブロックコメント
*/

C 言語と一致しています。

識別子#

識別子は変数、型などのプログラムエンティティに名前を付けるために使用されます。識別子は実際には一つまたは複数の文字 (A~Z と a~z) 数字 (0~9)、アンダースコア_で構成されたシーケンスですが、最初の文字は文字またはアンダースコアでなければならず、数字ではいけません。

これはほとんどのプログラミング言語の規範と同じです。

例えば、maheshkumarabcmove_namea_123myname50_tempja23b9retVal はすべて有効な識別子です。1ab は数字で始まり、case はキーワード、a+b は他の文字などは無効な文字です。

文字列結合#

Go 言語の文字列結合は + を使用して実現できます。

fmt.Println("Google" + "Runoob")

キーワード#

Go 言語には合計 25 のキーワードがあります。

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

そのほかに、Go 言語には 36 の定義済み識別子があります。

appendboolbytecapclosecomplex
copyfalsefloat 32float 64imagint
int 32int 64iotalenmakenew
printprintlnrealrecoverstringtrue
complex 64complex 128uint 16int 16uint 32uintptr
panicuint 8uint 64int 8uintnil

Go 言語における空白#

Go 言語では、空白は通常、識別子、キーワード、演算子、式を区切るために使用され、コードの可読性を向上させます。

変数の宣言は空白で区切る必要があります。

var x int
const Pi float64 = 3.14159265358979323846

変数演算子の間には空白を入れることが推奨され、プログラムがより美しく見えます。

var z int = x + y

キーワードの間には必ず空白を入れる必要があります。

if x > 0 {
    // 何かをする
}

関数呼び出し時には、関数名左側の等号の間に空白を入れ、引数の間にも空白を入れる必要があります。

result := add(2, 3)

フォーマットされた文字列#

Go 言語では fmt.Sprintf または fmt.Printf を使用して文字列をフォーマットし、新しい文字列に代入します:

  • Sprintf はフォーマットパラメータに基づいてフォーマットされた文字列を生成し、その文字列を返します
  • Printf はフォーマットパラメータに基づいてフォーマットされた文字列を生成し、標準出力に書き込みます
package main

import (
    "fmt"
)

func main() {
   // %d は整数、%s は文字列を表します
    var stockcode=123
    var enddate="2024-10-25"
    var url="Code=%d&endDate=%s"
    var target_url=fmt.Sprintf(url,stockcode,enddate)
    fmt.Println(target_url)
    fmt.Printf(url,stockcode,enddate)
}

// 出力結果
Code=123&endDate=2024-10-25
Code=123&endDate=2024-10-25

補足:fmt パッケージのさまざまな出力方法の違い

  • fmt.Print はそのまま出力します
  • fmt.Printf はフォーマットされた出力をします
  • fmt.Println は各値の間に空白を加え、末尾に改行を加えます

Go 言語には println()print() といういくつかの組み込み関数があり、どちらもパッケージに属さず、直接使用できます。単純に引数を出力するだけで、フォーマットはサポートされておらず、通常は簡単なデバッグ目的で使用されます。

println()print() は fmt の fmt.Printlnfmt.Print の違いと同じです。

fmt.Print("go","python","php","javascript") // gopythonphpjavascript
fmt.Println("go","python","php","javascript") // go python php javascript
fmt.Printf("go %d", 1) // go 1
println("Hello Go!") // Hello Go!

データ型#

データ型の出現は、データを必要なメモリサイズの異なるデータに分けるためであり、プログラミングの際には大きなデータを使用する場合に大きなメモリを要求する必要がありますので、メモリを十分に活用できます。

Go 言語はカテゴリに応じて以下のようなデータ型に分けられます:

  1. ブール型:値は定数 true または false のみです
  2. 数値型:Go 言語は整数型と浮動小数点型の数値をサポートし、複素数もサポートしています。その際、ビット演算は補数を使用します
  3. 文字列型:Go 言語の文字列は単一のバイトで結合されており、文字列のバイトは UTF-8 または Unicode エンコーディングを使用します
  4. 派生型
    1. ポインタ Pointer
    2. 配列
    3. 構造体
    4. チャネル Channel
    5. 関数 Function
    6. スライス Slice
    7. インターフェース
    8. マップ Map

参照型: スライス Sliceポインタマップ Mapチャネル Channel関数

数値型

整数型:Go にはアーキテクチャに基づく型もあり、例えば:int、uint および uintptr があります。

説明
uint 8無符号 8 ビット整数 (0 から 255)
uint 16無符号 16 ビット整数 (0 から $2^{16}-1$)
uint 32無符号 32 ビット整数 (0 から $2^{32}-1$)
uint 64無符号 64 ビット整数 (0 から $2^{64}-1$)
int 8有符号 8 ビット整数 (-128 から 127)
int 16有符号 16 ビット整数 ($-2^{15}$ から $-2^{15}-1$)
int 32有符号 32 ビット整数 ($-2^{31}$ から $2^{31}-1$)
int 64有符号 64 ビット整数 ($-2^{63}$ から $2^{63}-1$)

Go において int は不定長の型であり、現在のコンピュータのワード長に依存します。現在のコンピュータが 64 ビットの場合、int 型も 64 ビットになりますが、これは int64 の長さと同じですが、依然として異なる二つのデータ型です。

浮動小数点型

説明
float 32IEEE-754 32 ビット浮動小数点数
float 64IEEE-754 64 ビット浮動小数点数
complex 6432 ビット実数と虚数
complex 12864 ビット実数と虚数

その他の数値型

説明
byteuint 8 に似ています
runeint 32 に似ています
uint32 または 64 ビット
intuint と同じサイズ
uintptr無符号整数、ポインタを格納するために使用されます

Go 言語はフォーマットされた文字列 %T を使用してデータ型を印刷できます。

fmt.Printf("type: %T\n", a)

浮動小数点精度の問題

浮動小数点数の計算出力には一定の偏差がありますが、整数に変換して精度を設定することもできます。

package main
import (
    "fmt"
)
func main() {
    a := 1.69
    b := 1.7
    c := a * b      // 結果は 2.873 であるべきです
    fmt.Println(c)  // 出力は 2.8729999999999998 です
}

精度を設定する

package main
import (
    "fmt"
)
func main() {
    a := 1690           // 1.69 を表します
    b := 1700           // 1.70 を表します
    c := a * b          // 結果は 2873000 で 2.873 を表します
    fmt.Println(c)      // 内部エンコーディング
    fmt.Println(float64(c) / 1000000) // 表示
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。