zoukankan      html  css  js  c++  java
  • go语言基础一:数据类型,变量和常量,类型转化

      做了很久的java,最近有空研究下go语言,跟java一样,go语言也是一门语言,那么他的学习方法跟java是相差不远的,记得之前入门java的时候,自己摸索,

    一抹黑很难受,那么现在学习go语言,因为有了之前的经验,所以自己从基础开始学习go语言。

    一   数据类型

      java中 数据类型分为:

        基本数据类型和引用数据类型,String 是应用数据类型,所以存在比较特殊的地方

        包括: byte,short,int ,floate,double,Boolean,long  ,char,这是java的基础数据类型

      go语言中:

        分为基本数据类型和符合数据类型

        基本数据类型(原⽣生数据类型):

          整型(int )、int8,int16,int32,int64,int,还有无符号类型,uint8,uint16,uint32,uint64

            在java中byte类型为一个字节,站8位,所以int8就是byte的另外称号,无符号类型整形就是这意思,不包括符号,所以只有正数

          浮点型(float32,floate64,complex64,complex128)、其中complex为复数的意思,i的平方为-1,复数分为整数部分和复数部分,

            复数部分为i,在代码也是这么表示,如果1i   不可以写成i,则 编译变量,所以如果为1,时候需要写1i

          布尔型、bool   只可以为true和flase,是无法参加计算的

          字符串、string   在java中是大写,但是在go中式写,

          字节 byte  int8,

          字符rune:(相当于java中的char,不过是字符),这个地方需要注意的是,go语言的编码格式utf-8,所以中文是站3个字节,所以“hello,中国“字符串的长度为6+3*2=12.

        符合数据类型(派生数据类型):

          指针(pointer)、指针,就是一个指向,地址值,浅拷贝传输的是值,深拷贝传输的指针

          数组(array)、 数组

          切 ⽚(slice)、 切片就是可变数组,需要通过make方法来创建,底层维护了三个ptr,len,cap

          映射(map)、 就是键值类型,需要通过make来创建

          函数(function)、就是一段操作代码片段,可以有入参,和出参

          结构体(struct)、可以理解为java中的类,bean对象

          通道 (channel) 是gorotine之间通讯所用的内容

    二 变量

      变量量的本质是计算机分配的⼀一⼩小块内存,专⻔门⽤用于存放指定数据,在程序 运⾏行行过程中该数值可以发⽣生改变;

      变量量的存储往往具有瞬时性,或者说是临时存储,当程序运⾏行行结束,存放 该数据的内存就会释放,⽽而该变量量就会消失;

      Go 语⾔言的变量量名由字⺟母、数字、下划线组成,⾸首个字符不不能为数字;

      Go语法规定,定义的局部变量量若没有被调⽤用则编译错误。 命名 : camelCasing⻛风格,不不建议⽤用下划线连接多个单词

      变量声明:

      var 变量量名 变量量类型    这是单个变量进行声明的,变量在声明的时候进行初始化,这种会变量为nil

      变量名 := 变量值

      变量名1,变量名2 :=变量值1,变量值 2     需要注意这种方式,如果变量名被定义过那么就会编译报错

      匿名变量  Go语⾔言的函数可以返回多个值,⽽而事实上我们并不不是对所有的返回值都⽤用得上。那么就可以使⽤用匿匿名变量量,⽤用“_”下划线替换即可。匿匿名变量量不不占⽤用命名空间,不不会分配内存

      当然也可以如下方式设置

    var (
        a int
        b string
        c []float32
        d func() bool
        e struct {
            x int
            y string
        }
    )

    三 常量

      (⼀)、声明⽅方式

        1、相对于变量,常量是恒定不变的值,例如圆周率。
        常量是⼀一个简单值的标识符,在程序运行时,不会被修改。
        2、常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字福串
        3、常量量的定义格式:
          const 标识符 [类型] = 值
          可以省略略类型说明符 [type],因为编译器器可以根据变量量的值来⾃自动推断其类型
          显式类型定义: const B string = "Steven"
          隐式类型定义: const C = "Steven"
        4、多个相同类型的声明可以简写为:
        const WIDTH , HEIGHT = value1, value2
        5、常量定义后未被使⽤,不不会在编译时出错。
      (二)、常量用于枚举(常量组)

        

    const (
        Unknown = 0
        Female = 1
        Male = 2
    )
    const (
      a = 10
      b
      c
    )
    const (
        a = iota
        b = iota
        c = iota
    )
    println(a, b, c)
    打印输出:0 1 2
    第⼀一个 iota 等于 0,每当 iota 在新的⼀一⾏行行被使⽤用时,它的值都会⾃自动加
    1;所以 a=0, b=1, c=2 
    const (
        a = iota
        b 
        c 
    println(a, b, c)
    打印输出:0 1 2
    第⼀一个 iota 等于 0,每当 iota 在新的⼀一⾏行行被使⽤用时,它的值都会⾃自动加
    1;所以 a=0, b=1, c=2
    const (
        i = 1<<iota
        j = 3<<iota
        k
        l
    )
    func main() {
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
    }
    打印输出结果:
    i= 1
    j= 6
    k= 12
    l= 24
    const (
        a1 = '⼀一'
        b1
        c1 = iota
        d1
    )
    func main() {
    fmt.Println(a1, b1, c1, d1)
    }
    打印输出结果:
    19968 19968 2 3

    这个地方很多人好奇为”--”  打印为19968   中文字符站三个字节,对应的编码就是这个

    四  类型转换 

      1、T(表达式)    

        采⽤用数据类型前置加括号的⽅方式进⾏行行类型转换。T表示要转换的类型;表

        达式包括变量、数值、函数返回值等。
        类型转换时,需要考虑两种类型之间的关系和范围,是否会发⽣生数值截断
        布尔型⽆无法与其他类型进⾏行行转换。
     
     2、float与int之间转换
        需要注意float转int时精度的损失
      3、int转string
        其实相当于是byte或rune转string。
        该int数值是ASCII码的编号或Unicode字符集的编号。转成string就是将根
        据字符集,将对应编号的字符查找出来。
        当该数值超出Unicode编号范围,则转成的字符串串显示为乱码。
        例例如19968转string,就是“⼀一”。
        【备注:】
        ASCII字符集中数字的10进制范围是[30 - 39]
        ASCII字符集中⼤大写字⺟母的10进制范围是[65 - 90]
        ASCII字符集中⼩小写字⺟母的10进制范围是[97 - 122]
        
    Unicode字符集中汉字的范围是[4e00-9fa5],10进制范围是
        [19968 - 40869]
    4、string转int
      不不允许字符串串转int(cannot convert 变量量 (type string) to type int),只能通过strconv这个包下面的函数进行转换

      

  • 相关阅读:
    Good Bye 2015 D
    Good Bye 2015 C
    good bye 2015 B
    寒假训练第九场 Brocard Point of a Triangle
    HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)
    HDU 1029 Ignatius and the Princess IV DP
    找钱问题
    POJ3260——背包DP(多重)——The Fewest Coins
    Charm Bracelet
    POJ1787——背包DP(特定状态+回溯)——Charlie's Change
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/12260381.html
Copyright © 2011-2022 走看看