1. 程式人生 > 其它 >Go語言之資料型別(二)

Go語言之資料型別(二)

一、基本資料型別的預設值

資料型別 預設值
整型 0
浮點型 0
布林型 false
字串 ""

測試:

package main

import "fmt"

func main() {
    // 資料型別預設值
    var a int
    var b float32
    var c float64
    var isStatus bool
    var username string

    // 打印出預設值
    fmt.Printf("a=%d, b=%v, c=%v, isStatus=%v, username=%v", a, b, c, isStatus, username) //
a=0, b=0, c=0, isStatus=false, username="" }

二、基本資料型別相互轉換

Go中不同的資料型別之間需要顯式轉換,不同型別之間不能自動轉換。

package main

import "fmt"

func main() {
    var i int32 = 10

    // i int32-->float
    var j float32 = float32(i)

    // 高精度-->低精度
    var k int8 = int8(i)

    // 低精度-->高精度
    var m int64 = int64(i)

    fmt.Printf(
"i=%v j=%v k=%v m=%v", i, j, k, m) //i=10 j=10 k=10 m=10 }

注意:

  • Go中高精度可以轉成低精度,同樣低精度也可以轉成高精度,但是如果高精度轉低精度無法盛放會造成溢位的現象
  • 被轉換的是資料值,而它本身的型別並沒有變化

三、基本資料型別和string之間的轉換

(一)基本資料型別轉string

1、func Sprintf(format string, a ...interface{}) string

Sprintf根據format引數生成格式化的字串並返回該字串。

package main

import "fmt"

func main() {

    var a1 
int = 10 var a2 float64 = 10.236 var a3 bool = false var a4 byte = 'k' // fmt.Sprintf轉換 b1 := fmt.Sprintf("%d", a1) fmt.Printf("b1型別%T b1=%q\n", b1, b1) b2 := fmt.Sprintf("%f", a2) fmt.Printf("b2型別%T b2=%q\n", b2, b2) b3 := fmt.Sprintf("%t", a3) fmt.Printf("b3型別%T b3=%q\n", b3, b3) b4 := fmt.Sprintf("%c", a4) fmt.Printf("b4型別%T b4=%q\n", b4, b4) /* 輸出 b1型別string b1="10" b2型別string b2="10.236000" b3型別string b3="false" b4型別string b4="k" b5型別string b5="hello" */ }

2、使用strconv包中的函式

strconv包實現了基本資料型別和其字串表示的相互轉換,其中基本資料型別轉string的函式包含:

package main

import (
    "fmt"
    "strconv"
)

func main() {

    var a1 int = 10
    var a2 float64 = 10.236
    var a3 bool = false

    // FormatInt函式第一個引數是int64型別的引數,所以需要轉換
    b1 := strconv.FormatInt(int64(a1), 10)
    fmt.Printf("b1型別%T b1=%q\n", b1, b1)
    // 'f'表示格式,10表示小數位保留10位,64表示這個小數是float64型別
    b2 := strconv.FormatFloat(a2, 'f', 10, 64)
    fmt.Printf("b2型別%T b2=%q\n", b2, b2)
    b3 := strconv.FormatBool(a3)
    fmt.Printf("b3型別%T b3=%q\n", b3, b3)
    /*
      輸出
        b1型別string b1="10"
        b2型別string b2="10.2360000000"
        b3型別string b3="false"   
    */
}

(二)string型別轉基本資料型別

使用strconv包中的如下函式:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var str1 string = "123"
    var n1 int64
    // strconv.ParseInt返回兩個值(i int64, err error)
    // 將第二個err忽視使用 _
    n1, _ = strconv.ParseInt(str1, 10, 64)
    fmt.Printf("n1的型別位%T n1=%v\n", n1, n1) //n1的型別位int64 n1=123

    var str2 string = "123.56"
    var f1 float64
    f1, _ = strconv.ParseFloat(str2, 64)
    fmt.Printf("f1的型別位%T f1=%v\n", f1, f1) //f1的型別位float64 f1=123.56

    var str3 string = "false"    
    var b1 bool
    b1, _ = strconv.ParseBool(str3)
    fmt.Printf("b1的型別位%T f1=%v\n", b1, b1) //b1的型別位bool f1=false

}

注意事項:

  • string轉成基本型別要確保是有效的資料型別,比如不能將string型別值為”hello“轉成int型別
  • string轉int,float基本資料型別時,返回值是int64或者float64,如果需要其它型別需要再進行轉化
作者:iveBoy 出處:http://www.cnblogs.com/shenjianping/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連線,否則保留追究法律責任的權利。