GO 基础知识(变量,类型和常量)
字符串不用单引号!
变量
///////first
package main
import "fmt"
func main(){
//方法一
var age int //声明变量,不赋值为0
age = 29 //赋值
//方法二
var age int=29 //声明变量并初始化
//方法三
var age = 29 //可以推断出类型
var width, height int = 100, 90 //声明多个变量
var width, height //初始值为0
// 声明多个变量
var (
name = "naveen"
age = 29
height int
)
name, age:= "navven", 29//简短声明
name, age:="navven" //error:age没有被赋值,简短声明必须要全部赋值
a, b := 20,30 //声明
a, b := 40,50 //error: no new variables on left side of :=
a, c := 20, 30 // 语法无误,:=左侧必须要有一个新变量没有被声明
}
///////second
package main
import (
"fmt"
"math" // 导入math包,完成一些数学运算,用到的min,需要赋值float64类型才能使用
)
func main(){
a,b := 123.8, 234.7 //:=是声明加赋值,也可以使用 var()多个声明赋值,如果使用=则会报未声明的错
c := math.Min(a, b) //元素先声明在赋值
}
///////third
package main
func main(){
age := 29 //age是int类型
age = "navven" //错误,尝试赋值一个字符串给int类型变量
}
//go属于强类型语言
类型
/*
bool:
数字类型:
int8,16,32,64, int
uint~ //无符号整型就是自然数
float32,64
complex64, complex128 //复数类型
byte
rune(int32)
string
*/
package main
import (
"fmt"
"unsafe" //这里导入这个包是用于打印变量的字节大小,不过在项目中可能会有移植性问题。
)
func main(){
a := true
b := false
a && b
a || b
// int类型的大小在32位系统下是int32,在64位系统下是int64.
var a int = 89
b := 95
fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) //%T打印的是变量的类型,后者打印的是字节大小,a是4字节
}
//类型转换
package main
import (
"fmt"
)
func main() {
i := 55
j := 67.9
sum := i + j // 直接打印会报错,因为go是强类型语言不允许 int + float64
sum := i + int(j) //j is converted to int, 会打印出122
sum := float64(i) + j //122.9, 如果想用float32,则需要加float32(j),需要同类型运算或者取最大长度的类型进行运算
i := 10
var j float64 = float64(i) //如果没有显示转换,该语句会报错
}
常量
package main
import (
"fmt"
"math"
)
func main(){
const a = 55
a = 89 //不可以对常量进行赋值
var a = math.Sqrt(4)// a是变量,可以将函数math.Sqrt(4)的返回值赋值
const b = math.Sqrt(4)// b是常量,它的值需要在编译的时候就确实,而函数math.Sqrt(4)只会在运行的时候计算,所以就会抛错,不能赋值。 代码是先编译在运行
//双引号中的任何值都是Go语言中的字符串常量
var name = "Sam"
fmt.Printf("type %T value %v", name, name) //type string value sam
//混合类型运算,在go中是不允许的
var defaultName = "Same"
type myString string
var customName myString = "Sam" //不会报错
customName = defaultName //会报错
/*
上述代码的运行过程:
第一行声明并赋值了"Sam"给defaultName,但是没有声明类型
第二行给string类型起了别名myString,称之为myString类型
第三行声明了一个myString类型的变量customName,并赋值"Sam",Sam为无类型,所以可以赋值为任何类型
第四行将defaultName赋值给customName,会报错因为这两个变量的类型不同(string和myString),不能直接赋值
*/
}