GO基础知识(变量,常量和类型)

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),不能直接赋值
    
    */
    
}

原文地址:https://www.cnblogs.com/michealjy/p/13055156.html