【Go入门】第一天:变量、数据类型、常量、运算符、流程控制

序言

第一次写博客,笔者学过一遍C++基础,所以这次Go语言学习一些与C++相关的基础语法不再赘述,本篇博客用来自己学习记录使用,使用的材料主要是黑马程序员的Go教程如有遗漏或者错误的地方还请批评指正!

变量

变量声明

Go语言声明变量的格式:

var (变量名)(变量类型)

比如:

var ac int //定义一个【名字为ac】的【int型】【变量】

变量自动推导类型

C++11中有auto关键字可以用来推导变量的类型(编译阶段),Go语言中有更为方便的变量自动推导语法,具体格式为:

(变量名):=(值)

比如:

ad:=56//声明并初始化一个值为56的名字为ad的变量(推断出是int)

变量的多重赋值

Go语言中比较方便的一次定义或者赋值多个变量的语法,定义变量时格式如下:

(变量名1),(变量名2):=(值1),(值2)

比如:

//同时定义三个变量,a为int,b为float,c为字符串类型
a,b,c:=10,10.5,"haha"

给变量赋值的时候就是将“:=”改为“=”,注意变量类型,不再赘述。

多重赋值中的变量交换问题

在C/C++语言中,交换两个变量的值的方法有两个,一个是设置中间变量temp,一个是三段式互相加减。在Go中,使用变量的多重赋值功能进行互相赋值就可实现两个变量值的交换。

比如:

a:=10
b:=20
a,b=b,a//执行此句之后a为20,b为10

匿名变量

"_"为匿名变量,占一个变量的位置,没有意义,对应到匿名对象的值丢弃不使用,一般配合函数返回值进行使用。

 比如:

_,b,_,d=1,2,3,4//b变量和d变量分别被赋值2和4

 标准输出

输出函数封装在“fmt”包中,用之前需要import "fmt" 主要有三种输出形式——fmt.Print(),fmt.Println(),fmt.Printf()。其中格式化输入Printf函数的使用与C语言中的printf完全一样,所以不再赘述。

Println()函数打印括号内的参数到标准输出中,参数可以是常量和变量,打印时参数之间有空格,在每次打印的末尾自动添加换行符。

Print()函数用法和Print一样,但是参数中间没有空格,末尾也不会添加换行符。

标准输入

与输出函数一样,输入函数也封装在"fmt"包中 ,主要有三种输入形式——fmt.Scan()、fmt.Scanf()、fmt.Scanln()。其中格式化输入Scanf函数的用法与C语言scanf()函数完全一样。

 Scan()函数内部参数时变量的地址,一般使用&(变量名)来进行调用,功能是读取以空白符分割的值返回到地址中进行修改。

Scanln()函数用法跟Scan一样,区别是只有在碰到换行符的时候才会停止扫描。

具体差别可看大佬写的博客:Go语言中 Scan 与 Scanf 和 Scanln的区别_@了凡的博客-CSDN博客_go语言scanln

数据类型 

Go语言的数据类型和C/C++中的数据类型还是有很多不同的,Go语言的所有数据类型如下图所示(长度的单位是Byte而不是bit):

需要注意一下几点(学到后面再接着补充):

(1)bool类型占1【字节】,并且不可以像C++中一样使用数字来代替“true”和“false”。

(2)rune字符类型是unicode编码,一种相较于ASCII能代表更多字符的编码。

(3)string类型可以使用len()函数返回【有效字符个数】。

fmt包的格式化输入输出占位符

Go语言支持的格式化输入输出占位符相较于C还是有一些差别的,Go语言格式化输入输出占位符表如下所示:

常量 

 常量的定义

Go中常量的定义格式如下:

const (常量名) (数据类型) =(值)

比如:

const a int =10//定义一个名字为a,值为10的常量

此外还有一类常量是字面常量,一般用于左值或者函数传参时,是指程序中的【硬解码】常量。(什么是硬解码?)

 iota 枚举

枚举是常量的集合的概念,iota是go语言中的常量计数器,配合常量表达式使用。在一个const声明语句中,在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加一。参考大佬的博客:go 中 iota 枚举的使用_Grassto的博客-CSDN博客_go 枚举iota

在【const语句块】中注意事项:

(1)iota在不同的const块不会互相干扰。

const a=iota //a=0
const(     //注意这里是小括号
    b=iota //b=1
    c=iota //c=1
)

(2)没有表达式的常量定义复用上一行的表达式。

const (
    a = "a"    //a="a"
    b          //b="a"  
    c=iota     //c=0
    d          //d=1
)

(3)_设置可跳过的值。

const(
    a=iota*2    //0
    b           //2
    -           
    d           //6
)

简单的应用实例——定义数量级: 

运算符 

 算数运算符

Go语言算数运算符的构成十分简单,只有加减乘除模后自增自减7种运算符,Go语言在算数运算符中与C/C++有以下不同之处:

(1)Go中没有前自增运算符(++a)、三目运算符(a>b?a:b)

(2)Go中不存在隐式类型转换,使用算数运算符运算的数据【必须】是统一数据类型

类型转换

 Go 语言中不允许隐式转换,所有类型转换必须显式声明(Go语言所有的类型转换都是强制转换),而且转换只能发生在两种【相互兼容】的类型之间。Go语言的类型转换的形式主要有两种:

(1)类型(变量名):这种形式的类型转换要求新类型与原类型是等价的类型(相互兼容),即实现了相同的方法。

(2)变量名.(类型):这种形式用于向下转型,即接口对象转结构体对象,所以”变量名“必须是一个接口对象,这种形式在Go中叫做类型断言。

流程控制

选择结构 

if-else 结构

if-else 结构与C语言相比唯一不同之处是【Go语言中条件语句没有括号】。

if a>10 {
    fmt.Println(a)
}else if a<8 {
    fmt.Println("hhhh")
}else {
    fmt.Printfln("sss")
}

  switch-case 结构 

switch-case 结构与C语言switch-case相比主要有两点不同:

(1)switch后面直接接变量本身,变量不用加括号。

(2)Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用【fallthrough】强制执行后面的case代码

switch a {
    case 1:
        fmt.Print("11")
        //fallthrough
    case 2:
        fmt.Print("22")
}

循环结构 

在Go语言中【只有一种】循环结构——for循环结构,for循环共有两种使用方法,第一种使用方法除了条件不用加括号外与C语言中的for完全一致。

for i:=0;i<100;i++{
    fmt.Println(i)
}

第二种使用方法类似于C++11中的 for range,Golang for range用来解决遍历【数组】和【切片】问题。

for i,data :=range args{}//i是编号,data是迭代器

注意:不管是选择结构还是循环结构,大括号是不可以省略的,即使只有一行语句也不可以 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值