/*
Go中不存在隐式转换,所有类型转换必须显式声明
转换只能发生在两种相互兼容的类型之间
类型转换的格式:
<ValueA> [:]= <TypeOfValueA>(<ValueB>)
全局变量可以使用var()的形式,局部变量不可以使用var组的形式
type newInt int ,这里newInt不是int的别名,newInt转换成int类型的时候要显示的强制转化
*/
package main
import (
"fmt"
"strconv"
)
/*
常量的值在编译时就已经确定,不能在运行时产生值,
常量的定义格式与变量基本相同
等号右侧必须是常量或者常量表达式
常量表达式中的函数必须是内置函数
*/
/*
在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
使用相同的表达式不代表具有相同的值
iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
通过初始化规则与iota可以达到枚举的效果
每遇到一个const关键字,iota就会重置为0
*/
const a int = 1
const b = 'A'
const (
c = 1
d = a + 1
e = a + 2
)
const (
c1 = 1
d1
e1 //不给产量赋值,则d1=c1,e1=d1,等于上面的值,
_ABC = 89 //常量都是大写,前面加_就不会是public,
)
const (
a, b = 1, "2"
c, d
)
const a, b, c = 1, "2", "C"
func main() {
var a float32 = 1.2
b := int(a)
fmt.Println(a) //1.2
fmt.Println(b) //1
var c bool = true
d := int(c)
fmt.Println(c) //
fmt.Println(d) //cannot convert c (type bool) to type int
/*
string() 表示将数据转换成文本格式,因为计算机中存储的任何东西
本质上都是数字,因此此函数自然地认为我们需要的是用数字65表示
的文本 A。
*/
var e int = 85
f := string(e)
fmt.Println(e) //85
fmt.Println(f) //U,不能转成字符
g := strconv.Itoa(e) //int转成string
h, _ := strconv.Atoi(g) //string转成int
fmt.Println(g) //"85"
fmt.Println(h) //85
}
package main
/*
运算符
Go中的运算符均是从左至右结合
优先级(从高到低)
^ ! (一元运算符)
* / % << >> & &^
+ - | ^ (二元运算符)
== != < <= >= >
<- (专门用于channel)
&& //前面是false后面不运算
||
*/
import (
"fmt"
)
const a int = 1
func main() {
fmt.Println(^2) //-3,一元运算符
fmt.Println(1 ^ 2) //3,二元运算符
fmt.Println(!true) //false
fmt.Println(1 << 10) //1024,左移
fmt.Println(1 << 10 << 10) //1048576
}