当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Golang常见类型转换

Golang常见类型转换

2020年03月09日  | 移动技术网IT编程  | 我要评论

**

1.type(expression):

**

int(time.now().weekday()) //星期转int
int(time.now().month())   //月份转int
var a float64
a = 3.1
b := int(a) //float64转int
var a int
a = 1
b := int64(a) //int转int64

**

2.strconv包:

**
string和int、int32、int64:

i, _ := strconv.atoi(s) //string转int
s := strconv.itoa(i)    //int转string
i, _ := strconv.parseint(s, 10, 32) //string转int32
ii := int32(i)
i, _ := strconv.parseint(s, 10, 64) //string转int32
s := strconv.formatint(i, 10)       //int64转string

parseint函数的官方介绍:

func parseint(s string, base int, bitsize int) (i int64, err error)

–返回字符串表示的整数值,接受正负号。

–base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制。

–bitsize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64。

–返回的err是*numerr类型的,如果语法有误,err.error = errsyntax;如果结果超出类型范围err.error = errrange。

formatint函数中的10,表示10进制。

string和float32、float64:

f, _ := strconv.parsefloat(s, 32)        //string转float32
ff := float32(f)
f, _ := strconv.parsefloat(s, 64)        //string转float64
s := strconv.formatfloat(f, 'f', -1, 64) //float64转string

parsefloat函数的官方介绍:

func parsefloat(s string, bitsize int) (f float64, err error)

–解析一个表示浮点数的字符串并返回其值。

–如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用ieee754规范舍入)。

–bitsize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64。

–返回值err是*numerr类型的,语法有误的,err.error=errsyntax;结果超出表示范围的,返回值f为±inf,err.error= errrange。

formatfloat函数的官方介绍:

func formatfloat(f float64, fmt byte, prec, bitsize int) string

–bitsize表示f的来源类型(32:float32、64:float64),会据此进行舍入。

–fmt表示格式:‘f’(-ddd.dddd)、‘b’(-ddddp±ddd,指数为二进制)、‘e’(-d.dddde±dd,十进制指数)、‘e’(-d.dddde±dd,十进制指数)、‘g’(指数很大时用’e’格式,否则’f’格式)、‘g’(指数很大时用’e’格式,否则’f’格式)。

–prec控制精度(排除指数部分):对’f’、‘e’、‘e’,它表示小数点后的数字个数;对’g’、‘g’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。

string和time:

t, _ := time.parse("2006-01-02 15:04:05", s) //string转时间
t, _ := time.parseinlocation("2006-01-02 15:04:05", s, time.local) //string转本地时间
s := t.format("2006-01-02 15:04:05")         //时间转string

**

3.类型断言:expression.(type):

**

expression必须是接口类型,且自身类型与type类型相符。

expression.(type)的返回值一般为两个:value和ok,匹配成功ok为true,value有值,匹配失败ok为false,value无值;也可以直接接受value一个返回值,不过失败则直接panic:

func main() {
  var a interface{} = 100
  if aa, ok := a.(int); ok {
    fmt.println(aa)
  }
}

还可以结合switch和case使用,来判断接口实际类型:

func main() {
  var t interface{} = 100
  switch i := t.(type) {
  case float32:
    fmt.printf("i的类型%t i的值%v\n", i, i)
  case float64:
    fmt.printf("i的类型%t i的值%v\n", i, i)
  case int:
    fmt.printf("i的类型%t i的值%v\n", i, i)
  case bool:
    fmt.printf("i的类型%t i的值%v\n", i, i)
  case string:
    fmt.printf("i的类型%t i的值%v\n", i, i)
  default:
    fmt.println("其他类型")
  }
}

**

4.json:

**

golang中大多数数据类型都可以转化为有效的json文本,除了channel通道、complex复数、func函数等。

golang指针可进行隐式转换,表面进行的是指针序列化,内部会针对指针进行取值操作,实际还是针对所指的对象进行序列化。

公众号:李田路口

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网