类型转换

同类型之间的转换

Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

  1. import "fmt"
  2. func main() {
  3. var i int = 33
  4. var i64 int64
  5. i64 = int64(i)
  6. fmt.Println(i, i64)
  7. }

在同类型之间,精度高的类型可以向精度低的类型转换,但是可能会造成精度损失,低类型转换到高类型就没有这个问题了。

并且高精度类型向低精度类型转换的时候,还需要注意低精度类型的容量是否足够大。

不同类型之间的转换

bool -> int & int -> bool

Go语言中,我们知道布尔类型不可以和01 进行转换,但是我们可以自己定义方法,来进行转换:

  1. // 布尔类型转换为0或者1
  2. func btoi(b bool) int{
  3. if b {
  4. return 1
  5. }
  6. return 0
  7. }
  1. // 数字转换为布尔类型
  2. func itob(i int) bool { return i != 0 }

所以别的类型之前也可以相互转换,最常用的就是转为 string类型,或者由 string 类型转换为别的类型:

string -> int & int -> string

  1. import "strconv"
  2. func main() {
  3. str := "10"
  4. // string -> int
  5. i, _ := strconv.Atoi(str)
  6. }
  1. import "strconv"
  2. func main() {
  3. i := 10
  4. // int -> string
  5. str := strconv.Itoa(i)
  6. }

string -> float & float -> string

  1. import "strconv"
  2. func main() {
  3. str := "3.2222"
  4. // string -> float
  5. fl64, err := strconv.ParseFloat(str,64)
  6. fl32, err := strconv.ParseFloat(str,32)
  7. }
  1. import (
  2. "fmt"
  3. "strconv"
  4. )
  5. func main() {
  6. fl64 := 3.1415926
  7. // float -> string
  8. str := strconv.FormatFloat(fl64,'f',-1,64)
  9. str = fmt.Sprintf("%.3f",fl64)
  10. }

float -> string 时,我们可以使用两种方法:

第一种方法,可以获得更高精度的浮点数

第二种方法,可以更方便我们的使用,我自己日常使用的时候,都是使用第二种

string -> bool & bool -> string

  1. import "strconv"
  2. func main() {
  3. b := true
  4. // bool -> string
  5. str: = strconv.FormatBool(b)
  6. }
  1. import "strconv"
  2. func main() {
  3. str := "true"
  4. // string -> bool
  5. b, err := strconv.ParseBool(str)
  6. }

类型别名

当你在使用某个类型时,你可以给它起另一个名字,然后你就可以在你的代码中使用新的名字(用于简化名称或解决名称冲突),例如:

  1. import "fmt"
  2. type short int32
  3. type long int64
  4. func main() {
  5. var sh short = 22
  6. var lo long = 66
  7. fmt.Println(sh)
  8. fmt.Println(lo)
  9. }

第三行和第四行,就是新定义的类型,它拥有原类型的所有特性,可以代替原类型来使用,但是不可以使用原来类型的方法,可以根据新的类型定义新的方法。

不光是语言自带的类型可以定义别名,我们自己定义的结构体,接口,函数,都可以定义别名。


细节决定成败!

个人愚见,如有不对,恳请扶正!

Go语言|类型转换和类型别名的更多相关文章

  1. Swift - 06 - 数值类型转换和类型别名

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  2. Swift类型转换 和 类型别名的定义(typealias)

    (一)类型转换 类型转化在 Swift 中是比较严格的,不同类型之间可以认为是不能相互转化的,只能重新产生一个对象和值,并拷贝一份. 1.0 整型数值之间的转换. // 不同类型是不能直接相加的,这时 ...

  3. go语言基础之类型别名

    1.类型别名 示例: package main //必须有一个main包 import "fmt" func main() { //给int64起一个别名叫bigint type ...

  4. go语言之用户输入&类型别名&类型转换

    1.用户输入 package main import "fmt" func main() { //用户输入,程序接受并输出 var v1 int //fmt.Println(&qu ...

  5. GO语言总结(5)——类型转换和类型断言

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到 ...

  6. Swift语言指南(七)--语言基础之布尔值和类型别名

    原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...

  7. Go语言的类型转换和类型断言

    https://my.oschina.net/chai2010/blog/161418 https://studygolang.com/articles/9335  类型转换.类型断言和类型切换 ht ...

  8. C++语言中的类型(一)

    --分门别类是简化事物最有效的方式. 类型是C++语言的基础,对象类型决定了能对该对象进行的操作. 一.基本内置数据类型 C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意 ...

  9. C#6.0语言规范(四) 类型

    C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type : value_type | reference ...

随机推荐

  1. VUE 3.0 初体验之路

    在2020年9月中旬,vue.js发布了3.0正式版,在不久的将来,VUE3.0 也终将成为大前端的必然趋势, 环境搭建 node 版本要求: Node.js8.9 或更高版本 ,输入 node -v ...

  2. Go - 实现项目内链路追踪(二)

    上篇文章 Go - 实现项目内链路追踪 分享了,通过 链路 ID 可以将 请求信息.响应信息.调用第三方接口的信息.调试信息.执行的 SQL 信息.执行的 Redis 信息 串起来,记录的具体参数在文 ...

  3. 正则表达式: javascript Unicode 中文字符 编码区间:\u4e00-\u9fa5

    正则表达式: javascript Unicode 中文字符  编码区间:\u4e00-\u9fa5 RegExp 对象 javascript Unicode 中文字符的 编码区间: \u4e00-\ ...

  4. ESLint All In One

    ESLint All In One ESLint $ yarn add -D eslint .eslintrc.{js,yml,json} 优先级 .eslintrc .eslintrc.js .es ...

  5. js & bitwise-operators

    js & bitwise-operators 不用加减乘除运算符, 求整数的7倍 "use strict"; /** * * @author xgqfrms * @lice ...

  6. ES6 & tagged-template-literals & template strings

    ES6 & tagged-template-literals & template strings tagged template https://developer.mozilla. ...

  7. let & var & initialized bug

    let & var & initialized bug what's wrong with this? https://github.com/lydiahallie/javascrip ...

  8. egg.js in action

    egg.js in action fullstack https://github.com/eggjs/egg/ cli config router service midlewares HTTP C ...

  9. 小记一下递归通过id寻找一条链路的数据

    Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.sp ...

  10. linux查看目录文件以及子目录文件大小的命令

    可以使用以下命令,不过如果文件比较多,因为是递归统计大小的的,所以结果出来的会比较慢,需要等待. du -h --max-depth=1 * 以下是命令的说明 du [-abcDhHklmsSx] [ ...