类型转换

同类型之间的转换

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

    import "fmt"

    func main() {
var i int = 33
var i64 int64
i64 = int64(i)
fmt.Println(i, i64)
}

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

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

不同类型之间的转换

bool -> int & int -> bool

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

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

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

string -> int & int -> string

    import "strconv"

    func main() {
str := "10"
// string -> int
i, _ := strconv.Atoi(str)
}
    import "strconv"

    func main() {
i := 10
// int -> string
str := strconv.Itoa(i)
}

string -> float & float -> string

    import "strconv"

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

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

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

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

string -> bool & bool -> string

    import "strconv"

    func main() {
b := true
// bool -> string
str: = strconv.FormatBool(b)
}
    import "strconv"

    func main() {
str := "true"
// string -> bool
b, err := strconv.ParseBool(str)
}

类型别名

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

    import "fmt"

    type short int32
type long int64 func main() {
var sh short = 22
var lo long = 66
fmt.Println(sh)
fmt.Println(lo)
}

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

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


细节决定成败!

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

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. 并发编程之java内存模型(Java Memory Model ,JMM)

    一.图例 0.两个概念 Heap(堆):运行时的数据区,由垃圾回收负责,运行时分配内存(所以慢),对象存放在堆上 如果两个线程,同时调用同一个变量,怎两个线程都拥有,该对象的私有拷贝 (可以看一下,T ...

  2. 【非原创】codeforces 1060E Sergey and Subway 【树上任意两点距离和】

    学习博客:戳这里 本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 con ...

  3. 无需扫描即可查找和攻击域SQL Server (SPN)

    无扫描SQL Server发现简介 当您没有凭据或正在寻找不在域中的SQL Server时,使用各种扫描技术来查找SQL Server可能非常有用.但是,此过程可能很嘈杂,耗时,并且可能由于子网未知, ...

  4. ossutilmac64

    ossutilmac64 ossutil是以命令行方式管理OSS数据的工具,提供方便.简洁.丰富的存储空间(Bucket)和文件(Object)管理命令,支持Windows.Linux. Mac平台. ...

  5. Koa & WebSocket inAction

    Koa & WebSocket inAction node.js https://koajs.com/ ping / pong socket.io client send 2 as ping ...

  6. blogs & cnblogs

    blogs & cnblogs https://www.cnblogs.com/xgqfrms https://i.cnblogs.com/diaries https://i.cnblogs. ...

  7. tree ignore & bash & cmd

    tree ignore & bash & cmd tree ignore https://unix.stackexchange.com/a/47806 https://zaiste.n ...

  8. JS实现点击加载更多效果

    适用场景:后端直接把所有的文章都给你调出来了,但是领导又让做点击加载更多效果...(宝宝心里苦啊)   点击加载更多效果:         第一个和第二个参数分别是btn和ul的DOM(必填)     ...

  9. NGK公链DeFi发力,Baccarat项目引爆流动性挖矿热潮

    DeFi市值屡创新高,在这条康庄大道上,人们摩拳擦掌,就像90年代美国西部淘金热一般.DeFi带来的流动性挖矿构成了今年加密货币一道靓丽的风景线,而人们手握的不再是当年的锄头铲子,而是一串代码. 随着 ...

  10. BGV上线17小时最高888.88美金,投资最高回报率近+1778倍, 带动NGK内存暴涨

    至12月3日BGV币上线A网交易所DeFi板块以来,BGV价值飙升长.,据非小号的数据显示,BGV币价是718美元(东八区时间2020年12月4日早上九点四十),相较昨日涨幅达70.14%,以718美 ...