ゴーで一般的に使用される基本的なデータ型は、以下のとおりであります:
- 整数
- フロート
- ブーリアン
- 複数
- 弦
整数
- 署名付き
- INT8
- INT16
- INT32
- int64モード
- 符号無し
- UINT8
- uint16の
- UINT32
- UINT64
- 特別整数
- UINT、32ビットオペレーティングシステムuint32,64ビットオペレーティングシステムであるUINT64であります
- INT、32ビットオペレーティングシステムint32,64ビットオペレーティングシステムであり、int64モードであります
- ポインタを格納するためのUIntPtr、符号なし整数、
注:使用
int
及びuint
タイプは、それは32ビットまたは64ビットの整数であると仮定するが、考慮することができない場合int
とuint
は異なるプラットフォーム上で異なっていてもよいです。
アリー
// 程序入口
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)
}
ブーリアン
ゴー言語はするbool
Booleanデータ型、ブール型のデータだけを宣言するtrue(真)
と、false(假)
二つの値。
注意:
- ブール型変数のデフォルト値
false
。 - 囲碁言語はブール整数のキャストでは許可されません。
- 値に参加することはできませんブール演算は、他のタイプに変換することはできません。
複数
実部と虚部、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は、変換されるタイプを表します。式は、変数、演算子が含まれており、複雑な機能は値を返します。