从零开始学Go之基本语法(一):基本数据类型与变量

基本数据类型:

Go中数据类型并不是特别多,但是有一部分用法却比较多,这一部分放到后面再细学。

Go中的基本数据类型有:

①整型:int,uint

②浮点型:float32,float64

③布尔型:bool

④字符型:byte,rune

⑤字符串型:string

整型可以按长度分为int8,int16,int32,int64和对应无符号版本的uint8,uint16,uint32,uint64

uint8就是byte型,int16对应C中的short,int64对应C中的long

浮点数需要改变对应精度输出(即保留小数点后位数)使用格式化输出的动词%f,例子:

fmt.Printf("%..f\n",math.Pi)

可以用math包中的math.MaxFloat32和math.MaxFloat64来获取浮点数范围的常量值

bool只有两个值true和false,不初始化的情况下默认为false

字符类型统一用‘‘来表示单个字符;byte是uint8类型,代表了ASCII码的一个字符,类似C中的char;rune是int32类型,代表一个UTF-8字符,由于长度变长,可以表示中文日文或者其他复合字符

(如果byte中存在中文会出现溢出错误)

string用""来处理单行字符,识别转义符;用``来处理多行字符,不识别转义符。string内部实际是由uint8类型的切片组成,使用UTF-8编码,由于长度不足,非ASCII字符是以占两个字节的方式保存在string中的,如果存在非ASCII字符时遍历很容易出现不符合预期的情况,一般需要转义成rune切片再遍历。同时string是只读的字节切片,不可以直接改变,但是转义成rune切片后可以改变。

func main() {
 var a string
 a = "asd测试一号"
 fmt.Printf("a[0]类型:%T\n", a[0]) //uint8
 //a[0]=‘f‘ 无法编译
?
 var b byte
 //b=‘中‘ 错误:constant 20013 overflows byte
 fmt.Printf("b:%v\n", b)
?
 var c string
 c = "α"
?
 fmt.Print("c遍历:")
 for i := 0; i < len(c); i++ {
  fmt.Printf("%v\t", c[i]) //两个字节
 }
 fmt.Println()
?
 d := []rune(c)        //转义为rune切片
 fmt.Printf("d[0]类型:%T\n", d[0]) //uint8
 fmt.Print("d遍历:")
 for i := 0; i < len(d); i++ {
  fmt.Printf("%v\t", d[i])
 }
 fmt.Println()
 d[0] = ‘β‘ //可以直接修改
 fmt.Print("d:")
 fmt.Println(d)
}
a[0]类型:uint8
b:0
c遍历:206 177
d[0]类型:int32
d遍历:945
d:[946]

变量:

变量声明:

基本操作:var [变量名] [变量类型]

var a int

批量操作:

var (

[变量名] [变量类型]

……

)

var (
 a int
 b string
)

在Go中,声明局部变量未使用会发生编译错误,但声明全局变量未使用不会发生编译错误

变量初始化:

初始化默认值(即声明变量但没有进行初始化操作):

整型、浮点型:0

字符串:""

布尔:bool

切片、函数、指针:nil

func main(){
   var(
      a int
      b float64
      c string
      d bool
      e []float32
      f func()
      g *types.Pointer
   )
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Println(d)
   fmt.Println(e)
   fmt.Println(f)
   fmt.Println(g)
}
0
0
?
false
[]
<nil>
<nil>

(如果用C/C++的话就一定习惯在使用前进行初始化操作,例一个字符串不初始化就没有结束符/0,由于VC编译器未初始化栈空间以0xCC填充,堆空间用0xCD填充,对应烫和屯,就出现了烫烫烫烫梗)

初始化操作:

标准:var [变量名] [类型] = [表达式]

简化:var [变量名] = [表达式]

var a int = 100
?
var b =0.64

在简化的初始化操作中,会根据右边表达式推导变量类型,如果为小数,则会尽量提高精确度,使用float64类型

初始化操作也可以跟批量操作

var(
 a int = 100
 b float64 = 0.64
)

短变量:

[变量名] := [表达式]

a, b := 10, 0.64

这是Go中的一个特别声明并初始化的方法,是初始化操作的更简化版。

要注意的是短变量声明中变量名必须是之前没有定义过的变量否则会报错编译错误,如果是同时赋值多个短变量,只有有一个变量是新变量即可以使用短变量

多变量赋值:

[变量名1],[变量名2],... = [表达式1],[表达式2],...

a, b = b, a
c, d := Function()

在Go中当多个变量需要同时赋值的时候,会按照变量的左值和右值从左到右处理,也可以使用短变量或者函数返回值。多变量赋值也可以用于完成无需临时变量的变量交换

匿名变量:

_,[变量名1] := [忽略表达式],[表达式1]

_, a := 1, 2

当不需要接受对应的变量时使用“_”下划线,此时只有变量a接收到2。匿名变量不占用命名空间同时不分配内存

原文地址:https://www.cnblogs.com/VingB2by/p/11071228.html

时间: 2024-10-16 01:27:39

从零开始学Go之基本语法(一):基本数据类型与变量的相关文章

从零开始学Kotlin-基础语法(1)

从零开始学Kotlin-基础语法(1) 注释 //单行注释 /* 多行注释 */ /** * 多行注释 */ 定义变量/常量 变量定义:var 关键字 var <标识符> : <类型> = <初始化值> 常量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量) val <标识符> : <类型> = <初始化值> 常量与变量都可以没有初始化值,但是在引用前必须初始化 var name: String//不指定变

从零开始学 Web 之 ES6(六)ES6基础语法四

大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.字符串的扩展

从零开始学ios开发(十四):Navigation Controllers and Table Views(上)

这一篇我们将学习一个新的控件Navigation Controller,很多时候Navigation Controller是和Table View紧密结合在一起的,因此在学习Navigation Controller的同时,我们还将继续学习Table View其他一些特性,毕竟Navigation Controller还是相对来说毕竟简单的,没有什么太大的花头,它的主要作用就是一个view的切换,切来切去,而Table View的花头就比较多了,这次我们将这2个控件结合在一起进行学习. 再多说一

《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:

<从零开始学Swift>学习笔记(Day 57)--Swift编码规范之注释规范:文件注释.文档注释.代码注释.使用地标注释 原创文章,欢迎转载.转载请注明:关东升的博客 前面说到Swift注释的语法有两种:单行注释(//)和多行注释(/*...*/).这里来介绍一下他们的使用规范. 文件注释 文件注释就在每一个文件开头添加注释,文件注释通常包括如下信息:版权信息.文件名.所在模块.作者信息.历史版本信息.文件内容和作用等. 下面看一个文件注释的示例: /* Copyright (C) 201

《PHP 5.5从零开始学(视频教学版)》内容简介、目录

<PHP 5.5从零开始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零开始学(视频教学版)>源代码.教学视频下载地址: http://pan.baidu.com/s/1zt9hW 内 容 简 介 本书循序渐进地介绍了PHP 5.5开发动态网站的主要知识和技能,提供了大量的PHP应用实例供读者实践.每一章节都清晰讲述了代码作用及其编写思路,使读者能在最短时间内迅速掌握PHP的应用开发技能.

从零开始学ios开发(十三):Table Views(下)Grouped and Indexed Sections

在前面2篇关于Table View的介绍中,我们使用的Style都是Plain,没有分组,没有index,这次学习的Table View和iphone中的通讯录很像,有一个个以字符为分割的组,最右边有一列小字符作为index,最顶端有一个搜索栏可以进行搜索,好了,下面开始这次的学习. 1)创建一个新的项目,template选择Single View Application,命名为Sections 2)添加Table View,连接delegate和data source到File's Owner

从零开始学ios开发(三):第一个有交互的app

感谢大家的关注,也给我一份动力,让我继续前进.有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题. 这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触

关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全书共分5 部分,包括Swift语法篇.Cocoa Touch框架编程篇.混合编程篇.进阶篇和项目实战篇,囊括了开发工具介绍.语言基础知识,直至应用在App Store上线的所有内容.此外,本书前20 章专门配有同步练习,以帮助读者掌握所学知识.本书更加适合Swift开发者.大家可以看一下. http://it

关东升的《从零开始学Swift》 即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift> <从零开始学Swift>将在<Swift开发指南>第1版的基础上添加Swift2.0的内容,同时摒弃第1版的一些不合理的内容,使得本书更加适合Swift开发者.我将连续发一些<从零开始学Swift>的学习笔记,有兴趣者,可以看一下. 附<从零开始学Swift> 此书目录: 第1章 准备起航1.1 本书约定1