ゴー言語プリミティブデータ型の知人

ゴーで一般的に使用される基本的なデータ型は、以下のとおりであります:

  • 整数
  • フロート
  • ブーリアン
  • 複数

整数

  • 署名付き
    • INT8
    • INT16
    • INT32
    • int64モード
  • 符号無し
    • UINT8
    • uint16の
    • UINT32
    • UINT64
  • 特別整数
    • UINT、32ビットオペレーティングシステムuint32,64ビットオペレーティングシステムであるUINT64であります
    • INT、32ビットオペレーティングシステムint32,64ビットオペレーティングシステムであり、int64モードであります
    • ポインタを格納するためのUIntPtr、符号なし整数、

注:使用int及びuintタイプは、それは32ビットまたは64ビットの整数であると仮定するが、考慮することができない場合intuintは異なるプラットフォーム上で異なっていてもよいです。

アリー

// 程序入口
func main() {
    // age = "17"
    // fmt.Println("Hello World")
    // fmt.Print("isOK")
    // fmt.Printf("Age: %s", age)\n
    var a1 = 10
    fmt.Printf("十进制:%d\n", a1)
    fmt.Printf("二进制:%b\n", a1)
    fmt.Printf("八进制:%o\n", a1)
    fmt.Printf("十六进制:%x\n", a1)

    // 直接定义八进制
    a2 := 077
    fmt.Printf("直接声明八进制:%d\n", a2)
    // 直接定义十六进制
    a3 := 0x12321
    fmt.Printf("直接声明十六进制:%d\n", a3)
}

フロート

ゴー言語は、2つの浮動小数点型をサポートしています。

  • math.MaxFloat32が定義された定数を使用してのfloat32、。
  • math.MaxFloat64が定義された定数を使用してのfloat64、。

フロート印刷は、パッケージFMTで使用することができ%f、以下のように、:

package main
import (
        "fmt"
        "math"
)
func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

ブーリアン

ゴー言語はするboolBooleanデータ型、ブール型のデータだけを宣言するtrue(真)と、false(假)二つの値。

注意:

  1. ブール型変数のデフォルト値false
  2. 囲碁言語はブール整数のキャストでは許可されません。
  3. 値に参加することはできませんブール演算は、他のタイプに変換することはできません。

複数

実部と虚部、complex64 32の実部と虚部、complex128実数部と虚数部64が複数存在します。次のとおりです。

func main(){
    var c1 complex64
    c1 = 1 + 2i
    var c2 complex128
    c2 = 2 + 3i
    fmt.Println(c1)
    fmt.Println(c2)
}

サブ文字列

、ネイティブデータ型が表示されますに言語の文字列を行く他のネイティブなデータ型(int型、ブール値、のfloat32、float64型など)と同じと同じように文字列を使用します。文字列の言語実装の用途の中に入るUTF-8コード。値は文字列のある双引号(")コンテンツ、例えば、ソース言語ゴーに非ASCII文字に直接添加してもよいです。

s1 := "Joker"
s2 := "HelloWorld"

複数行の文字列がバッククォートである場合、その内容の内部に、例えば、出力されます。

s1 := `
    你好,
    欢迎光临。
`

文字

各文字列の元素組成が呼び出され字符字符''囲まれた次のように、:

s1 := 'H'
s2 := '你'

二つの方法で言語の文字を移動します:

  • 代表UINT8タイプ、またはコールタイプバイト、ASCII符号コードを、
  • ルーンタイプの代表的なUTF-8シンボル。

あなたは中国語、日本語、または他の複雑な文字を処理する必要があるときは、使用する必要があるruneタイプを。runeそれは実際にタイプですint32

Goはユニコード、メイク治療より便利Unicodeベースのテキストを処理するために特殊なルーンの種類を使用して、あなたはまたの世話をする必要がありますバイトのタイプは、デフォルトの文字列処理、パフォーマンスとスケーラビリティも使用することができます。

package main

import "fmt"

func main() {
    s1 := "Hello World,你好啊!"
    // fmt.Printf(s1)
    // 遍历字符串,Byte类型
    for i := 0; i < len(s1); i++ {
        fmt.Printf("%v(%c)", s1[i], s1[i])
    }
    fmt.Println()
    // 遍历字符串,rune类型
    for _, r := range s1 {
        fmt.Printf("%v(%c)", r, r)
    }
}

次のように出力結果は以下のとおりです。

72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)239(ï)188(¼)140()228(ä)189(½)160( )229(å)165(¥)189(½)229(å)149(
)138()239(ï)188(¼)129()
===============================================
72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)65292(,)20320(你)22909(好)21834(啊)65281(!)

図から分かるように、英語以外の文字や数字のために、それは中国語など、バイトによって占有されていないが、第一のトラバーサル方法は、バイトを横断しているUTF-8ことが3つのバイトを占有符号化、我々は最初の結果を取得する場合には横断するバイトを押すと、この結果は、我々が望むものではありません。私たちは、第二のトラバース、表現するために使用ルーン種類必要UTF-8な文字、1バイト以上により、文字のルーンを。

文字列エスケープ

特別な文字列は、それは一般的に次の表の使用、エスケープする必要があり、その本来の意味を維持する必要があります。

エスケープ 意味
\ rを 入ります
\ nは ラップ
\トン 集計
\」 単一引用符
\\ バックスラッシュ
\」 二重引用符

例えば:

package main

import "fmt"

func main() {
    s1 := "\"Hello World\""
    fmt.Printf(s1)
}

一般的な文字列操作

方法 効果
のみ(A) 長さ(バイト長)を探しています
+またはfmt.Sprintf 文字列の連結
strings.Split 文字列をカット
strings.contains 文字列が含まれているかどうかを決定します
strings.HasPrefix、strings.HasSuffix 文字列を解析する接頭語/接尾辞(ブール値)
strings.Index()、strings.LastIndex() 出力が表示されますサブストリング内の位置(インデックス)
strings.Join([]の文字列、9月列) 操作に参加

例:

package main

import "fmt"
import "strings"

func main() {
    s := "Hello World 你好啊!"
    // 求长度
    fmt.Println(len(s))
    // 字符串拼接
    s1 := "Joker"
    s2 := "你好"
    fmt.Println(s1 + s2)
    s12 := fmt.Sprintf("%s%s", s1, s2)
    fmt.Println(s12)
    // 字符串切割
    sSplit := strings.Split(s, " ")
    fmt.Println(sSplit)
    // 判断字符串是否包含
    fmt.Println(strings.Contains(s, "H"))
    fmt.Println(strings.Contains(s, "L"))
    // 判断字符串的前缀
    fmt.Println(strings.HasPrefix(s, "H"))
    // 判断字符串的后缀
    fmt.Println(strings.HasSuffix(s, "啊"))
    // 判断字串出现的位置
    fmt.Println(strings.Index(s, "H"))
    // 判断子串最后出现的位置
    fmt.Println(strings.LastIndex(s, "o"))
    // join操作
    fmt.Println(strings.Join(sSplit, "-"))
}

文字列を変更します

最初に変換する文字列の必要性を変更する[]runeか、[]byteへの変換が完了した後、stringどちらの変換は、メモリの再割り当て、バイト配列をコピーします。

package main

import "fmt"

func main() {
    s1 := "hello"
    // 1、强制转换
    byteS1 := []byte(s1)
    // 2、进行修改
    byteS1[0] = 'H'
    // 3、强制转换成字符串并打印
    fmt.Println(string(byteS1))

    s2 := "我爱你中国"
    // 1、强制转换
    runeS2 := []rune(s2)
    // 2、修改
    runeS2[3] = '祖'
    // 3、强制转换成字符串并打印
    fmt.Println(string(runeS2))
}

型変換

囲碁言語のみキャスト、ない暗黙の型変換。この構文は、使用している場合にのみサポートの2種類との相互変換。

次のように基本的な構文はキャスト:

T(表达式)

ここで、Tは、変換されるタイプを表します。式は、変数、演算子が含まれており、複雑な機能は値を返します。

おすすめ

転載: blog.51cto.com/7834466/2478701