Go语言|类型转换和类型别名
类型转换
同类型之间的转换
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
import "fmt"
func main() {
var i int = 33
var i64 int64
i64 = int64(i)
fmt.Println(i, i64)
}
在同类型之间,精度高的类型可以向精度低的类型转换,但是可能会造成精度损失,低类型转换到高类型就没有这个问题了。
并且高精度类型向低精度类型转换的时候,还需要注意低精度类型的容量是否足够大。
不同类型之间的转换
bool -> int & int -> bool
在Go语言中,我们知道布尔类型不可以和0或1 进行转换,但是我们可以自己定义方法,来进行转换:
// 布尔类型转换为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语言|类型转换和类型别名的更多相关文章
- Swift - 06 - 数值类型转换和类型别名
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Swift类型转换 和 类型别名的定义(typealias)
(一)类型转换 类型转化在 Swift 中是比较严格的,不同类型之间可以认为是不能相互转化的,只能重新产生一个对象和值,并拷贝一份. 1.0 整型数值之间的转换. // 不同类型是不能直接相加的,这时 ...
- go语言基础之类型别名
1.类型别名 示例: package main //必须有一个main包 import "fmt" func main() { //给int64起一个别名叫bigint type ...
- go语言之用户输入&类型别名&类型转换
1.用户输入 package main import "fmt" func main() { //用户输入,程序接受并输出 var v1 int //fmt.Println(&qu ...
- GO语言总结(5)——类型转换和类型断言
上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到 ...
- Swift语言指南(七)--语言基础之布尔值和类型别名
原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...
- Go语言的类型转换和类型断言
https://my.oschina.net/chai2010/blog/161418 https://studygolang.com/articles/9335 类型转换.类型断言和类型切换 ht ...
- C++语言中的类型(一)
--分门别类是简化事物最有效的方式. 类型是C++语言的基础,对象类型决定了能对该对象进行的操作. 一.基本内置数据类型 C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意 ...
- C#6.0语言规范(四) 类型
C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type : value_type | reference ...
随机推荐
- 功能按钮发post请求 参数放入body中
1.功能按钮事件参数 queryBody_ids:{data.ids} 前端会生成下划线后面的编码ids,并替换{data.ids} 2.后端建参数model后端参数可以只包含前端返回的部分参数 [D ...
- Pangolin 安装测试 Installation & Examination (Ubuntu 20.04)
Pangolin 安装测试 Installation & Examination (Ubuntu 20.04) 如题所述,这是一个比较轻松的 Pangolin 安装配置方法,同样是基于 WSL ...
- 爬虫入门一 基础知识 以及request
title: 爬虫入门一 基础知识 以及request date: 2020-03-05 14:43:00 categories: python tags: crawler 爬虫整体概述,基础知识. ...
- codeforces 1016C - Vasya And The Mushrooms 【构造 + 思维】
题目链接:戳这里 题意:从(1,1)出发,一遍把格子走完,每个格子只能走一次.问怎么走总和最大. 解题思路:画图可知,总共就3种走法的混合. dw: 样例1的走法 up: 样例1反过来的走法 lp: ...
- spring-cloud-netflix-eureka-client
服务注册中心eureka-server已经搭好,我们开始编写一个eureka-client,并提供一个hello服务 一.新建module,选择对应的springcloud模块,pom.xml如下: ...
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...
- Taro 3.x in Action
Taro 3.x in Action React, 小程序 https://taro-docs.jd.com/taro/docs/README Taro Next 跨端, 跨框架 Taro 是一个开放 ...
- vue-cli-service & @vue/cli-service
vue-cli-service & @vue/cli-service https://www.npmjs.com/package/@vue/cli-service https://yarnpk ...
- CSS selector All In One
CSS selector All In One CSS selector https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors ...
- Chrome 黑科技
Chrome 黑科技 秒变记事本 data:text/html, <htmlcontenteditable> OK <a href="data:text/html, &qu ...