ゴーでプリミティブ型

前書き

強い型静的言語として、ゴーは、私たちが気になり、多くのプリミティブ型を持っています。非コレクションやコレクション(例えば、配列、スライス、マップ):最初のレベルでは、彼らは2つのグループに分けることができます。この記事では、移動中に三つの異なる非コレクションプリミティブ型をお話します。

1.ブール

2.数値(整数、浮動小数点および複素数)

3.テキスト(文字列とルーン)

 

ブーリアン

1.真とブールの場合はfalse

これは、前方の音の結晶かもしれませんが、移動中に、我々は唯一のboolean型のキーワード真&偽を使用することができます。他のいくつかの言語で、私たちは偽のために真、0のために3または11または19を使用することができないように。

例えば:

メイン(){FUNC 
      := 36、R 
      3 {ため
          fmt.Printf( "体積%、%T \ n"は、R、R)
      } 
} 
//出力
:9:2:非BOOL 3(// prog.go条件として使用される)型なし番号を入力   

 

数の 

1.整数

A)Intergerは、符号intergerまたはunsign intergerすることができ

:符号整数は、5つのバージョンがある
  int型は:サイズを変更することが、mininal INT32ました。
  INT8:-128〜127
  INT16:-32,768〜32,767
  INT32:周りに20億
  int64モードは:大異なり
  、より大きな数を設定することができ数学ライブラリから使用、大きなパッケージを

unsign整数、4つのバージョンがあります:
  UINT、UINT8、uint16の、UINT32を、我々はint64モードがありません。

b)の計算

アドオン、substract、複数、divise、残り(残りは整数のみに存在する):私たちは整数で行うことができます計算の5種類があります

計算が整数なり整数、残りは見逃すであろう。私たちは、整数の間の残りを取得するために%演算子を使用することができます。

FUNCメイン(){ 
	:= 3 
	、B = 10 
	fmt.Println(B / A)
	fmt.Println(Bの%のA)
} 
//出力
// 3、余りが欠落している
// 1、%演算子を使用して余りを得ます

同じ家族の中で、異なるタイプのお知らせ整数はcaculateionを行うことはできません。例えばINT8 + INT16 =エラー

c)の計算をビット単位
のものをシンプルに保つために、私たちは今のビット単位の計算をカバーしていません。

2.Floatingポイント

a)の浮動小数点、のfloat32とのfloat64の2つのバージョンがあります。

私たちは、小数(例:3.14)または指数(3.14e12、または3.14E12)を使用することができます。

メインFUNC(){ 
	= 10.1 
	、B:= 10.1E12 
	fmt.Printf( "体積%、%T \ n"、)
	fmt.Printf( "体積%、%T"、B、B)
} 
/ /出力
// 10.1、のfloat64 
// 1.01e + 13、のfloat64

b)の計算

%(剰余演算子)を除いて、それらは:追加、substract、複数、divise。そして、浮動小数点はビット単位の計算を持っていません。

3.複素数

ビルドインタイプほど言語設計複素数はありません。このことから、Goは科学であるどのように強力なのglimpsを得ることができます。

a)の二つのバージョン、complex64とcomplex128。

数学では、私たちは、私は、複素数を表現するためにフロート+ floatを使用しています。だから、複素数であるのfloat32 +のfloat32 = complex64かのfloat64 +のfloat64 = complex128

メインFUNC(){ 
	:= 1 + 2I 
	B:=複合(1、1.2)
	fmt.Printf( "体積%、%T \ n"、)
	fmt.Printf( "体積%、%T"、 B、B)
} 
//出力
//(1 + 2I)、complex128 
//(1 + 1.2i)、complex128

b)は、ビルドイン機能

複雑な()複素数を構築します。

本当の()は複素数の実部を取得します。

複素数の虚数部を得るためにIMAG()。

FUNCメイン(){ 
	:= 1 + 2I 
	B:=複合(1、1.2)
	fmt.Printf( "体積%、%T \ n"、)
	fmt.Printf(「体積%、%T \ nは」A、B、B)
	fmt.Printf( "体積%、%T \ n"は、実際の(b)は、実際の(B))
	fmt.Printf( "体積%、%T \ n"、IMAG(B)、IMAG (B))
} 
//出力
//(1 + 2I)、complex128 
//(1 + 1.2i)、complex128 
// 1のfloat64 
// 1.2のfloat64

C)の計算

それらは:アドオン、substract、複数、divise。通知は、数学では、2つの複素数の乗算と除算は、多項式スタイルとして定義されています。

 

テキスト

1.文字列

移動中の文字列は、任意のUTF8文字を表します。それは強力ですが、また(そのために、私たちはルーンを持っている)文字列が使用可能なすべての文字をエンコードすることはできませんになります。

文字のa)は、文字列、コレクション

文字列のソート配列などで動作します。それは、手紙のコレクションです。私たちはそれらをスライスする[]演算子を使用することができます。

メインFUNC(){ 
	S:= "これは文字列である" 
        fmt.Printf( "体積%、%T"、S [2] S [2])
} 
//出力
// 105、UINT8

この結果は、私たちの期待から外れています。私たちは、「i」は手紙を期待しています。私たちは、文字列をスライスするとき、実際に、他の言語に私達は行くに我々はUTF8 / ASCIIコードの数を取得する、手紙を得ることができることがあります。uft8 /アスキーで "i" のための105本のスタンド。そしてUINT8は、移動中のバイトの別名です。

私たちは、それを文字列に戻って変更する)(文字列を使用することができます。

FUNCメイン(){ 
	S:= "これは文字列" 
        fmt.Printf( "体積%は、%T"、文字列(S [2])、文字列(S [2]))
} 
//出力
// I、弦

b)の文字列は不変です

文字列は配列のようにスライスすることができますが、我々は価値の内部を変更することはできませんが。

{()主FUNC 
        := "これは文字列である" S 
        S [2] = "U" 
        fmt.Printf( "体積%、%T"、文字列(S [2])、S [2])
} 
// 2つのエラー:
//まず、[2]バイトSに「U」の文字列を割り当てることはできません
//秒、文字列内の値を操作することができません

+とC)連結2つの文字列

最も一般的なタスクは、移動中に、我々は演算子+を使用することができ、2つの文字列一緒に連結しています。

メインFUNC(){ 
	S:= "これは文字列である" 
	S2:= "これは、文字列である" 
        fmt.Println(S + S2)
} 
//出力
//これはstringThisでも文字列であります

バイトのコレクションにD)変換文字列

私たちは、バイトのコレクションに文字列をCONVERする)]バイト([使用することができます。これは、我々は文字列のみを使用するよりも、他のアプリケーションとのより簡単に我々のアプリケーションを動作させることができます。

メインFUNC(){ 
	S:= "これは文字列であり、" 
	B:= []バイト(S)
        fmt.Printf( "体積%、%T"、B、B)
} 
//出力
// [84 104 105 115 32 105 115 32 97 32 115 116 114 105 110 103]、[] UINT8

結果が示す私たちの文字列s内の各文字とスペースのASCII / UTF8値である整数の集合、。私たちは前に言ったように、UINT8はバイトの別名であるので、この[] uint8の手段[]バイト。

私たちは何の努力もせずに必要があるとして、我々は背中と前方に[]バイト文字列を交換することができます。いくつかの状況では、我々は、文字列はバイトの集まり([]バイト)、およびその逆であると言うことがあります。

メインFUNC(){ 
	S:= "これは文字列であり、" 
	B:= []バイト(S)
        fmt.Printf( "体積%、%T \ n"、B、B)
	fmt.Printf(「体積%、% T」、文字列(B)、列(B))
} 
//出力
// [84 104 105 115 32 105 115 32 97 32 115 116 114 105 110 103]、[] UINT8 
//これは、文字列、文字列であります

2.rune

a)のルーンを宣言するために単一引用符を使用します

ゴーでは、文字列を宣言するために、「二重引用符を使用してルーンをdecalreには '単一引用符を使用します。 

ルーンは、唯一の文字にすることができます。VAR Rルーン= 'AA' はエラーを返します。

メイン(){FUNC 
	VAR Rルーン= '' 
	= '':R2 
	fmt.Printf( "体積%、%T \ n"は、R、R)
	、fmt.Printf( "体積%、%T"、R2 R2)
} 
//出力
// 97、INT32 
// 97、INT32

結果では、タイプは手段のルーンがint32型の別名であることを、int32です見ることができます。

B)私たちはルーンを必要とする理由

それは英語の文字列でない場合、文字列をスライスすると、間違った可能性があります。

我々は最初のforループで見ることができるように、各S [I]は、UINT8(バイト)です。つまり、アプリケーションから英語の文字として漢字(漢字)を認識する。しかし、それぞれの漢字は3つのバイトではない1バイト(英字)です。二forループ出力完全に間違ってそう。

メイン(){FUNC 
	VARの文字列= "劳动光荣" 
	= []バイト(S):B 
	fmt.Printf( "体積%、%T \ n"、B、B)
	fmt.Printf(「体積%、%T \ n」は、文字列(B)、列(B))

	iについて:= 0; I <lenの(S)。I ++ { 
		fmt.Printf( "体積%、%T \ n"は、S [i]は、S [I])
	} 
	
	iについて:= 0; I <lenの(S)。I ++ { 
		fmt.Printf( "体積%、%T \ n"は、文字列(S [i])と、ストリング(S [I]))
	} 
} 
//出力
[229 138 179 229 138 168 229 133 137 232 141 163 ]、[] UINT8 
劳动光荣、列
229、UINT8 
138、UINT8 
179、UINT8 
229、UINT8 
138、UINT8 
168、UINT8 
229、UINT8 
133、UINT8 
137、UINT8 
232、UINT8 
141、 
オングストローム
??、ストリング
³、列
Å、ストリング
??、列
¨、列
Å、ストリング
??、ストリング
??、列
è、ストリング
??、ストリング
£、ストリング

私たちはルーン使用している場合は、私たちのアプリケーションはよく英語以外の文字を認識することができます。forループでは、英語以外の文字の各ルーンを取得する範囲の機能を持っています。

forループ最初の各出力は、ルーンを意味INT32です。

FUNCのmain(){ 
	VARの文字列= "劳动光荣" 
	I、V用:=範囲S { 
		fmt.Printf( "体積%、体積%、%T \ n"は、I、V、V)
	} 

	iについて、V :=範囲S { 
		fmt.Printf( "体積%、体積%、%T \ n"は、I、ストリング(V)、ストリング(V))
	} 
} 
//出力
0、21171、INT32 
3、21160、INT32 
6 、20809、INT32 
9、33635、INT32 
0、劳、列
3、动、列
6、光、列
9、荣、ストリング

  

概要

物事をシンプルに保つために、この記事から3つの通知があります。

1.だけboolenタイプのキーワードtrueとfalseを使用することができます。

2.は、彼らが同じ家族の中であっても、異なるタイプの数を計算することはできません。それはINT8 + INT32 =エラーです。

英語以外の文字列について3.ケア、我々は、ルーンの助けが必要になる場合があります。

おすすめ

転載: www.cnblogs.com/drvongoosewing/p/12040340.html