Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日

1、Go 在语法上有着类 C 的感觉。如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔。一般情况下,你不需要分号。

2、Go
同其他语言不同的地方在于变量的类型在变量名的后面。例如:不是,int a,而是 a int。当定义了一个变量,它默认赋值为其类型的 null
值。这意味着,在 var a int后,a 的 值为 0。而 var s string,意味着 s 被赋值为零长度字符串,也就是 ""。

3、Go语言的变量声明和赋值

在Go中使用var对变量进行声明,

例如:

var a int

a = 15

var将变量a声明为int型,然后通过=赋值。

当然在Go语言中,我们可以把声明和赋值过程一步完成,

例如:

a := 15(这一形式只可用在函数内)

在这种情况中,变量的类型是由值推演出来的,值15是int的类型的,推演出变量a为int类型。

使用var可以声明一组变量,

例如:var (

a int

b bool

)

如果变量的类型一致,还可以使用var a,b int 这种方式来声明变量,当然还可以使用这种方式进行声明和赋值:a,b := 20,16

在Go语言中有一个特殊的变量(_,即下划线),任何赋给它的值都被丢弃,这将在一些地方变得很有用处。

需要注意的是,Go 的编译器对声明却未使用的变量在报错。

4、Go语言的类型

1)布尔类型(bool):值可以为true和false

2)数字类型:int,这个类型根据硬件决定,在32位机器上,int是32位的,在64位机器上,int是64位。uint也是如此。

当我们想要明确长度时,可以使用int32(uint32)。完整的整数类型列表(符号和无符号)是
int8,int16,int32,int64 和 byte,uint8,uint16,uint32,uint64。byte 是 uint8
的别名。浮点类型的值有 float32 和 float64 (没有 float 类型)。64 位的整数和浮点数总是 64 位的,即便是在 32
位的架构上。需要留意的是这些类型全部都是独立的,并且混合用这些类型向变量赋值会引起编译 器错误。

例如:

var a int

var b int32

a = 15

b = a + a//编译器会报错,提示(cannot use g + g (type int) as type int32 in assignment)

对于数字类型的赋值,可以使用八进制、十六进制或科学计数法:077,0xFF,1e3 或者 6.022e23 这些 都是合法的。

3)常量:constant ,常量在编译时被创建,只能是数字、字符串或布尔 值。

例如:

const (

a = iota

b = iota //iota是一个枚举值,第一次使用时值为0,下一次使用时值就变为1,每一次使用值都会+1

)

const (

a = 0

b bool = true //明确指定常量的类型

4)字符串

字符串赋值:s := "Hello World!"

字符串在 Go 中是 UTF-8 的由双引号(”)包裹的字符序列。如果你使用单引号(’)则 表示一个字符(UTF-8 编码),这种在 Go 中不是 string 。一旦给变量赋值,字符串就不能修改了:在 Go 中字符串是不可变的。

那么如何实现改变字符串这种操作呢?需要通过下面这种方式:

s := "Hello,World!"

m := []rune(s)

m[0] = ‘C‘

s2 := string(m) //实际上只是新创建了一个字符串

fmt.Printf("%s\n", s2)

多行字符串:

s := "Starting part"

+ "Ending part"

会被转换为:

s := "Starting part" ;

+ "Ending part" ;

这是错误的语法,应当这样写:

s := "Starting part" +

"Ending part"

Go 就不会在错误的地方插入分号。

还可以使用反引号来实现,s := `Starting part

Ending part`

作为原始字符串符,值 在引号内的字符是不转义的。

5)rune

rune是int32的别名,用 UTF-8 进行编码。这个类型在什么时候使用呢?例如需要
遍历字符串中的字符。可以循环每个字节(仅在使用 US ASCII 编码字符串时与字符等 价,而它们在 Go
中不存在!)。因此为了获得实际的字符,需要使用 rune 类型。

6)复数

Go 原生支持复数。它的变量类型是 complex128 (64 位虚数部分)。如果需要小一些 的,还有 complex64 – 32 位的虚数部分。复数写为 re + imi,re 是实数部分,im 是虚数部分,而 i 是标记 。

例如:

var ss complex64 = 5 + 5i

fmt.Printf("Value is: %v", ss)

打印结果: Value is: (5+5i)

7)错误

var e error定义了一个error类型的变量e,其的值是 nil。这个 error 类型是一个接 口。

5、Go语言的运算符

Go 支持普通的数字运算符,下图中列出了当前支持的运算符,以及其优先级。它们 全部是从左到右结合的。

Go语言不支持运算符重载(或者方法重载),而一些内建运算符却支持重载。例如 + 可以用于整数、浮点数、复数和字符串(字符串相加表示串联它们)。

6、Go关键字

上图中列出了Go中所有的关键字,一些已经接触过,另外一些将在后面介绍。

Go语言学习笔记(二) [变量、类型、关键字]

时间: 2024-10-02 21:09:41

Go语言学习笔记(二) [变量、类型、关键字]的相关文章

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

C#学习笔记二: C#类型详解

前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. 再会有三篇博客  这个系列的就会结束了. 也算是自己对园子中@Learning Hard出版的<<C#学习笔记>>的一个总结了. 博客内容基本上都是白天抽空在公司写好的了, 但是由于公司内部网络不能登录博客园所以只能够夜晚拿回来修改,  写的不好或者不对的地方也请各位大神指出. 在下感

【GO】GO语言学习笔记二

基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 字符串型:string 字符型:rune 错误类型:error 复合类型: 指针:pointer 数组:array 切片:slice 字典:map 通道:chan 结构体:struct 接口:interface 1.布尔型,与其他语言中的布尔型一样 2.整型: a.类型表示 需要注意的是,int和

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

Go语言学习笔记1 变量,类型以及赋值

1.变量 1.1 声明变量 使用var关键字可以创建一个指定类型的变量: var i int = 0 var i = 0 var i int 以上三个表达式均是合法的,第三个表达式会将i初始化为int类型的零值,0:如果i是bool类型,则为false:i是float64类型,则为0.0:i为string类型,则为"":i为interface类型,则为nil:i为引用类型,则为nil:如果i是struct,则是将struct中所有的字段初始化为对应类型的零值. 可以在同一条语句中声明多

C语言学习笔记--enum和sizeof关键字

1.enum关键字 C语言中enum关键字用来定义枚举类型 (1)enum 是 C 语言中的一种自定义类型(2)enum 值是可以根据需要自定义的的整型值(3)第一个定义的 enum 值默认为 0 (4)默认情况下的 enum 值是在前一个定义值的基础上加 1 (5)enum 类型的变量只能取定义时的离散值 enum Color { GREEN, //默认 GREEN==0; RED= 2, //自定义 RED==2; BLUE //默认情况,是在前一个的基础上加 1,即 BLUE==3 };

初步swift语言学习笔记2(可选类型?和隐式可选类型!)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 假设认为文章对你有所帮助.请通过留言或关注微信公众帐号fengsh998来支持我,谢谢. 可选类型.隐式可选类型 在swift中.可选类型其根源是一个枚举型.里面有None和Some两种类型.事实上所谓的nil就是Optional.None, 非nil就是Optional.Some, 然后会通过Some(T)包装(wrap)原始值,这

Go语言学习笔记(4)复合类型

  Go语言的复合类型,包括数组.切片和映射等. 值.指针和引用类型 通常情况下Go语言中的变量持有相应的值.也就是说,我们可以将一个变量想象成它所持有的值来使用.其中有些例外,通道.函数.方法.映射.切片是 引用变量,它们持有的都是引用,也即保存指针的变量.值在传递给函数或者方法的时候会被复制一次,对于布尔类型和数值类型来说这非常廉价,但是对于大型变 量代价却非常大.而且复制传参的方式,修改值只是修改了副本,这能保证原始变量不被修改,但也一定程度上增加了修改原始值的麻烦.幸好在Go语言中有指