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表示要转换的类型;表

    达式包括变量、数值、函数返回值等。

    类型转换时,需要考虑两种类型之间的关系和范围,是否会发⽣生数值截断

4、string转int

  不不允许字符串串转int(cannot convert 变量量 (type string) to type int),只能通过strconv这个包下面的函数进行转换