Goタイプ変換と断言のまとめ

2458 ワード

標準タイプ変換
タイプ名を関数名、変換された値をパラメータとします.スパンの小さい変換に使用します.
//[]byte string   
b := []byte{'a','b','c'}
str := string(b)
b = []byte(str)

//int int64 int32   
var x int = 0x123456789
y := int32(a)
z := int64(a)
x = int(y)

stringとint
int => string
//int => string
d := 12345
s := strconv.Itoa(d)

//int64 => string
var d64 int64 = 12345
s := strconv.FormatInt(d64, 10) //        

//  int32   string ,      int32  int64
var d32 int32 = 12345
s = strconv.FormatInt(int64(d32), 10)

string => int
//string => int
s := "12345"
d := strconv.Atoi(s)

//string => int64
d64,err := strconv.ParseInt(s, 10, 64)
//  2   ,  1      int  :0  int 8  int8 32  int32    
//    int64
strconv.ParseInt("123", 16, 8)は誤りを報告し、int 8を満たすことを要求するため、16進法の数は最大2桁しか与えられない.
stringとfloat
float 64回転文字列
var f64 float64 = 1232323232.3456323232
strconv.FormatFloat(f64, 'f', 3, 64)

パラメータの意味は、フォーマット、小数点以下の桁数の保持、満たすタイプ(32または64)です.
2番目のパラメータ(フォーマット)は、b e E f g Gのうちの1つがそれぞれ異なるフォーマットに対応するように限定される.フォーマットと結果は次のとおりです.
  • b 5168738262720215p-22
  • e 1.232e+09
  • E 1.232E+09
  • f12323232.3346有四舍五入
  • g 1.23e+09
  • G 1.23E+09

  • 义齿
    s := "12345.6789"
    strconv.ParseFloat(s, 64)
    //            float32   float64
    

    interfaceの処理
    オブジェクト向けの思考では,ほとんどのタイプがinterfaceのサブクラスとして理解できる.しかし、サブクラスメソッドを呼び出すにはinterfaceを特定のサブクラスに変換する必要があります.
    interfaceのタイプ変換方式は特殊です
    var a interface{} = "xxxxx"
    s := a.(string) //      
    

    失敗するとpanicエラーが報告されると直接断言します
    var a interface{} = "xxxxx"
    s := a.(int)//  panic  
    

    だから断言する前に判断を加えることができます
    var i interface{} = "ssss"
    str, ok := i.(int)
    if !ok {
        fmt.Println("is not int")
    } else {
        fmt.Println(str)
    }
    

    switchと結合
    var i interface{} = "sssss"
    switch i.(type){
        case "int":
            fmt.Println("it's int")
        case "string":
            fmt.Println("it's string")
        default:
            fmt.Println("unknown type")
        }
    }
    
    .(type)変数のタイプを直接反射することができる.しかもswitchと組み合わせてしか使用できません.