zoukankan      html  css  js  c++  java
  • 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),不能直接赋值
        
        */
        
    }
    
    
  • 相关阅读:
    DBAccess
    业务耗时及数组
    QB资料学习.01
    格式化参数
    日志记录.02_线程处理
    nginx 开启gzip
    js 变量提升和函数提升
    js 深拷贝 vs 浅拷贝
    js 伪数组 转 数组
    js 对象原型和原型链
  • 原文地址:https://www.cnblogs.com/michealjy/p/13055156.html
Copyright © 2011-2022 走看看