ゴーコア開発の研究ノート(D) - 基本的なデータ型と文字列の交換

基本データ型:
明示的な変換(キャスト)Golang、Goalngデータ型が自動的に変換することができない、様々なタイプの変数の間の割り当てを要求!

変換方法:変換の実施形態と同様のpython、通信さT(v)の関数。
例としては、次のとおりです

	package main
	import "fmt"
	
	func main() {
	//尝试使用 i = float32(i)不可行,必须要重新定义变量
	var i int = 100
	var i1 float32 = float32(i)
	fmt.Printf("i1=%v\n",i1)
	fmt.Printf("i的类型为:%T\n",i)      //int
	fmt.Printf("i1的类型为:%T",i1)      //float32
	}

イラスト:

  1. スモールすることができINT8なっINT16大きな範囲の範囲、大きな範囲缶、INT8変更INT16に小型の範囲、となります。

  2. データ変換型テストサイト:ちょうど指定されたタイプ付与I I1のために変換された値を変換することによって、私自身とデータの種類が変化しない、
    変換された値を変数に格納されている、変数データは、それ自体の種類が変更されていません。

  3. 変換では、int64型INT8に変換した場合、コンパイラは文句はありませんが、変換プロセスの結果はバイナリでオーバーフローすると、結果はとても強いデータ型を有効にしない、矛盾しています。

  4. データ型の深い理解の2つの例:

    割り当てられたデータ変換値の//タイプは、クロス通行データタイプに割り当てなどINT32のInt64、これは間違いではないが、Int64のint32の変数値に変換しなければならないことはできません

    var (
    	n1 int32
    	n2 int64
    	n3 int8
    )
    n1 = 32
    n2 = int64(n1) + 10
    n3 = int8(n2) + 10
    fmt.Printf("%d %d %d",n1,n2,n3)
    

    // INTxx処理タイプの行はなく、値の範囲を満たしていない、コンパイラは文句ないが、値がオーバーフローする;最大値の数値範囲、コンパイラ直接エラーを満たしていない割り当て、次に何
    N6自体//コンパイラは、N5データのオーバーフロー、直接渡すことはできません128はN6に割り当てることはできません

    var (
    n4 int8
    n5 int8
    n6 int8
    )
    n4 = 10
    n5 = int8(n4) + 127
    n6 = int8(n4) + 128
    fmt.Printf("%d %d %d",n4,n5,n6)
    

★基本データ型と文字列型の相互変換可能です

  1. プログラム開発は、多くの場合、文字列のシステム変換および他の種類が必要です。

  2. 基本的な型変換文字列:
    (1)fmt.Sprintf():sprintfの文字列の形式パラメータを生成し、フォーマットされた文字列を返します。

    (2)は、StrConv():
    FUNC FormatBool(B BOOL)ストリング
    FormatInt(I Int64の、ベースINT)列FUNC
    FormatUint(I UINT64、ベースINT)ストリングFUNC
    FormatFloat(Fのfloat64、FMTバイト、PREC、ビットサイズINT)ストリングFUNC

    2つの変換コードの方法を示しています。

    package main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func main() {
    	//第一种方式,使用fmt.Sprintf()函数来转
    	num1,num2,bo,char := 90,20.5,true,"b"
    	var str,str1,str2,str3 string
    	str = fmt.Sprintf("%d\n",num1)
    	str1 = fmt.Sprintf("%f\n",num2)
    	str2 = fmt.Sprintf("%t\n",bo)
    	str3 = fmt.Sprintf("%v\n",char)
    	fmt.Println(str,str1,str2,str3)
    
    	/*第二种方式,使用package strconv:
    	func FormatBool(b bool) string
    	func FormatInt(i int64, base int) string
    	func FormatUint(i uint64, base int) string
    	func FormatFloat(f float64, fmt byte, prec, bitSize int) string
    	 */
    	var str4,str5,str6 string
    	num3,num4,bo1 := 99,13.56,true
    	//参数1:必须为int64, 参数2:多少进制
    	str4 = strconv.FormatInt(int64(num3),10)
    	//参数1:必须为float64,参数2:f是正常输出,e则是e的n次方格式
    	//参数3:小数点后多少位,参数4:bitSize为64
    	str5 = strconv.FormatFloat(float64(num4),'f',2,64)
    	//参数1:直接传变量即可                
    	str6 = strconv.FormatBool(bo1)
    	fmt.Println(str4,str5,str6)
        
        //Itoa()函数挺好使的,直接把一个int转换成字符串,但是不支持int64,相当于num5如果不是int还需要转int
    	var num5 int = 100
    	str7 = strconv.Itoa(num5)
    	fmt.Println(str7)
    }
    

3.文字列データ型変換タイプ基本
FUNC ParseBool(STR文字列)(BOOL値、ERR誤差)
FUNCのparseInt(文字列s、ベースINT、INTビットサイズ)(Int64型I、ERR誤差)
ベース、ビットサイズINT FUNC ParseUint(SストリングINT)(N-UInt64型、ERRエラー)
FUNC parseFloatは(S文字列、ビットサイズINT)〜(F)は、ERR誤差をのfloat64

変換の種類を行うためにstrconv.Parsexxxx()関数を使用します。
以下のケーススタディ、ショーどのように文字列の回転の基本タイプ:

	package main
	
	import (
	"fmt"
	"strconv"
	)
	
	func main() {
	/*
	可以看出来这里面几个函数都会返回两个值,一个是value,一个是error,我们
	需要的只是value,对error并不关心,所以可以使用"_"来忽略这个error
	例如:
	b , _ = strconv.ParseBool(str)
	func ParseBool(str string) (value bool, err error)
	func ParseInt(s string, base int, bitSize int) (i int64, err error)
	func ParseUint(s string, base int, bitSize int) (n uint64, err error)
	func ParseFloat(s string, bitSize int) (f float64, err error)
	*/
	
	//布尔值转换
	var str string = "true"
	var b bool
	b , _ = strconv.ParseBool(str)      //这个写法要注意,因为返回两个值
	fmt.Println(b)
	
	//int转换
	var str1 string = "123456"
	var num int64
	num , _  = strconv.ParseInt(str1,10,64)
	fmt.Printf("%T\n",num)
	
	//float转换
	var str2 string = "123.456"
	var num1 float32
	var num2 = float64(num1)
	num2 , _ = strconv.ParseFloat(str2,64)
	fmt.Println(num2)
	}

公開された50元の記事 ウォン称賛18 ビュー4025

おすすめ

転載: blog.csdn.net/weixin_41047549/article/details/89574743