zoukankan      html  css  js  c++  java
  • go(二)

    变量声明

    第一种:指定变量类型,声明后若不赋值,则使用默认值。int的默认值是0。String默认是空字符串“”。           

    var i int

    第二种:根据值自行判断变量类型(类型推导)。     

    var num=10.11  //(golang会推导出变量类型是小数)

    第三种:省略var使用:=,注意 := 左侧的变量不应该是已经声明过的,否则会编译报错。 

     name := "tom"
    //等价于
    var name String
    name = "tom"

    声明多变量

    第一种:   var n1, n2, n3 int
    第二种: var n1, name,n3 = 100, "tom",888
    第三种: n1, name, n3 := 100, "tom~", 888

     

    数据类型:

    有符号

    无符号

    拿int8为例,占1个字节(byte),即8位(bit),第一位字节是用来表示正负的,剩下7位累加起来就是2的7次方。0不在正数范围内,所以正数就是2的7次方减1。

    默认的int类型的大小和操作系统有关,32位的操作系统是4个字节,64位的操作系统是8个字节。

    float64相当于java中的double类型,双精度。

    golang的浮点类型默认声明为float64。

    字符类型:golang没有专门的字符类型,通常用byte来存储字符,一个字节,(0~255)

     String使用的注意细节

    1、如果想原样输入一段字符串,避免特殊字符被转义的话,可以使用反引号·(键盘上~符号下的符号)

    2、String字符串在换行拼接的时候需要将“+”放在上一句的最后,不能放在换行后的开头,因为go语言是不需要在代码后面写分号的,默认会加分号。

    如果在句子末尾在“+”的话系统就不会默认加分号,导致报错了。

     

    go语言基本数据类型转换

    和其他语言不同的是,go语言数据类型不能进行隐式转换,只能显示强制转换

    举个栗子

    var i int32 = 10;
    var n2 float32 =float32(i)

    go语言中数据类型的转换可以是从 表示范围小->表示范围大,也可以从 表示范围大->表示范围小,比如将int64转成int32也是可以的,代码并不会报错,只是可能存在转换结果按照溢出处理的风险,和我们希望的结果可能不一致。

    func main(){
        var n1 int32 = 12
        var n3 int8
        var n4 int8
        n4 = int8(n1) + 127 //编译通过,但是结果溢出处理。
        n3 = int8(n1) + 128//128已经超过了int8,数据类型转换失败,编辑报错。        
    }

     string和其他基本数据类型的转换

    func main(){
        var num  = 3 

      //第一种转换方式 str :
    = fmt.Sprintf("%d",num)
      //第二种转化方式 ,
    strconv.FormatInt方法的第一个入参必须是int64,第二个入参base,是base进制的字符串
        str := strconv.FormatInt(int64(num),10);  

       var num2 = 23.456
       //第一个入参是需要被转换的浮点变量,第二个入参是'f'是格式,第三个入参是表示保留小数点后10位,第四个入参“64”,表示返回的值是float64
      //fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很大时用'E'格式,否则'f'格式)
       str := strconv.FormatFloat(num2,'f',10,64); 
        // str := num + "" //由于不能和java一样使用强制类型转换,这种写法会导致编译报错
        fmt.Println(str);
       }

    https://studygolang.com/pkgdoc
    strconv的常用方法:
    1、Itoa是FormatInt(i, 10) 的简写,所以一下表达式是等价的
    strconv.FormatInt(i, 10)    <====>  strconv.Itoa(i)//Itoa的入参为int类型


    2、ParseBool(将string转成boolean类型)
    //1、说明:strconv.ParseBool(str)会返回两个值,(value bool,err error)
    //2、当我只想获取到返回的布尔类型,不想获取到err的值,就使用_进行忽略。
    var str string = "true"
    var b bool
    b,_ = strconv.ParseBool(str)

    3、 ParseInt(将string转化成int类型)
    var str2 string = "12345";
    var n1 int64;
    in,_ = strconv.ParseInt(str2,10,64)

    4、ParseFloat同理
    var str3 = "1.2323";
    var n3 float64;
    n3, _ = strconv.ParseFloat(str3,64)

    当比如将一个非数字的字符串转成int,使用parseInt函数,代码不会报错,但是会将转出来的int类型的值置为默认值0,其他类型的也一样,会设置成默认值。



    指针:

    指针类型:指针变量存的是一个地址,这个地址指向的空间才是值比如:var ptr *int = &num 

    func main(){
    	var i = 10
            //&符号可以输出对象在内存中对应的地址
    	fmt.Println("i的地址是=",&i)
         
         //1、ptr是一个指针变量
         //2、ptr的类型是 *int
         //3、ptr本身的值是&i
         var ptr *int = &i
         
         //获取指针所指向的值使用(*指针变量),比如获取上面的ptr指向的值就是 *ptr。
        fmt.Println("ptr=%v ",ptr)
        //ptr指针本身也会对应一个内存地址。
        fmt.Println("ptr 的地址=%v",&ptr)
        fmt.Println("ptr 指向的值=%v",*ptr) }

      

    //定义一个int类型的变量num,将num的值赋值给指针ptr,并通过ptr去修改num的值。
    func main(){
    var num int = 10 var ptr *int = &num *ptr = 11 fmt.Println(num) }

    查看变量字节大小和数据类型

    unsafe.Sizeof(i)

  • 相关阅读:
    linux线程池简单实例
    OpenCv ROI操作
    OpenCV特征点检测------ORB特征
    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
    OpenCv学习--图像画框标记rectangle
    MATLAB 图片鼠标画框保存
    不错的Django博客
    windows下使用Redis
    前端页面模板bootstrap
    Jenkins启动Tomcat时提示Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  • 原文地址:https://www.cnblogs.com/songcuiting/p/11419430.html
Copyright © 2011-2022 走看看