程序结构

  基础部分仅仅列举和其他语言不一样的地方(C语言为例)。

声明

  Go语言有四个主要声明:var、const、type、func,类似于C语言中的变量,常量,结构体和函数。

package main //表明文件属于哪个包
import "fmt"
const boilingF = 212.0 //包级别声明,类似于全局变量
func main() {
var f = bologna //局部变量
var c = (f-32)*5/9
fmt.Printf("boiling point = %gF or %gC\n",f,c) }

变量使用

定义

  通用形式:var name type = expression,type和expression可省略一个。类型省略,由expression决定;表达式省略初始值对应零值。Go语言不存在未初始化的变量。  

var b,f,s=true,2.3,"four"  //多类型声明

   短变量形式:name:=expression,类型由expression决定,仅仅初始化一个新的变量才能用,同样可以声明多个变量如: i,j:=0,1  仅仅对可读性有帮助的时候才用这种形式。

指针使用

  指针的概念和访问符号和C语言一样,只是定义时候不一样而已。

  定义:*type

  指针类型的零值是nil。

new函数

  用法:new(T),创建一个T类型变量,初始化,并返回其地址。

  go语言里new不是一个关键字,可以重定义为另外的其他类型。如果使用new作为自定义变量名字,那么这个变量作用域内new函数就不能用了。

变量生命周期

  生命周期概念不在介绍,我们知道变量生命周期可以根据它所分配的空间来定。但是go语言编译器选择使用堆或栈上的空间不是基于使用var或new关键字的。看个例子:

var global *int
func f(){
var x int
x = 1
global = &x
}
func g(){
y:=new(int)
*y=1
}

  按照C语言习惯,局部变量使用的是栈空间,但这里x一定使用堆空间,因为它在f函数返回之后还可以通过global访问,这种情况我们称x从f逃逸。g函数返回后,y就不可访问了,可被回收,即便使用new,编译器也会在栈上分配*y。

  垃圾回收对于写出正确程序有巨大帮助,但是变量的生命周期是写出高效程序所必须的。记住它在性能优化时候是有好处的,因为每一次变量逃逸都需要一次额外的内存分配过程。

赋值

  go语言支持多重赋值。在实际更新变量前,右边所有的表达式被推演(即被计算出来),当变量同时出现在赋值符两侧时候特别有用。

  交换两个变量的值 x,y=y,x

  但是独立语句更易读。

  因为go语言函数支持多返回值,所以可以将不需要的值赋给空标识符 _,err = x.(T)

类型声明

  用法:type name underlying-type

  相当于C++的typedef关键字。

包和文件

  包的作用和其他语言中的库或模块作用类似,用于支持模块化、封装、编译隔离和重用。gopl.io/ch1/helloworld包文件存储在目录$GOPATH/src/gopl.io/ch1/helloworld中。

  每一个包给他的声明提供独立的命名空间。

  包让我们可以通过控制变量在包外面的可见性或导出情况来隐藏信息;管理标识符是否对外可见规则:导出标识符以大写字母开头。

  导出的包级别的声明在同一个包的所有文件中可见,因为包级别的常量名字以大写字母开头,可以使用packag.name来访问。

  package声明前面紧挨着文档注释对整个包进行描述。

导入

  go语言中每一个包通过import来导入。语言的规范没有定义从哪来以及含义,这依赖于工具来解释。导入声明可以给导入的包一个短名字,用来在整个文件中引用包的名字。

  如果导入一个没有被引用的包,就会触发错误!!

  包的初始化从初始化包级别变量开始,在依赖已解析完毕的情况下,根据依赖的顺序进行。

var a = b+c //最后初始化a
var b = f() //然后初始化b
var c = 1 //首先初始化
func f() int {
return c+1
}

  如果包由多个文件组成,初始化按照编译器收到的文件顺序进行:go工具会在调用编译器前将.go文件进行排序。

  

Go语言(1)——程序结构的更多相关文章

  1. [C语言]进阶|程序结构

    ------------------------------------------------------------------------------------ 全局变量: // main.c ...

  2. C语言之程序结构

    一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析. 一.浅谈程序中的变量 一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生 ...

  3. 【Go语言系列】2.3、Go语言基本程序结构:变量及常量

    1.什么变量 变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间. 1.1变量声明 Go 语言变 ...

  4. 【Go语言系列】2.2、Go语言基本程序结构:关键字与标识符

    什么是标识符 标识符用来命名变量.类型等程序实体.标识符是指Go语言对各种变量.方法.函数等命名时使用的字符序列,标识符由若干个字母.下划线_.和数字组成,且第一个字符必须是字母.通俗的讲就是凡可以自 ...

  5. 【Go语言系列】2.1、Go语言基本程序结构:注释

    注释在程序中的作用是对程序进行注解和说明,便于对源码的阅读.在源码中适当地添加注释,能够提高源码的可读性. Go语言的注释主要分成两类,分别是单行注释和多行注释. 单行注释: //单行注释 多行注释: ...

  6. [Objective-C语言教程]程序结构(3)

    1. Objective-C Hello World示例 Objective-C程序基本上由以下部分组成 - 预处理程序命令 接口 实现 方法 变量 声明和表达 注释 下面来看一下打印“Hello W ...

  7. 【C语言入门教程】1.1 基本程序结构

    基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...

  8. 网易云课堂_C语言程序设计进阶_第6周:程序结构

    6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...

  9. C语言函数与程序结构

    title : C语言函数与程序结构 tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义 grammar_cjkRuby: true --- 外部变量 变量声明用于说明变量 ...

随机推荐

  1. 这篇SpringBoot整合JSON的学习笔记,建议收藏起来,写的太细了

    前言 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编程语言的文本格式来存储和表示数据. 简洁和清晰 ...

  2. .Net orm 开源项目 FreeSql 2.0.0(满意的答卷)

    写在开头 2018年11月头脑发热到今天,一晃已经两年,当初从舒服区走向一个巨大的坑,回头一看后背一凉. 两年时间从无到有,经历数不清的日夜奋斗(有人问花了多长时间投入,答案:全职x2 + 两年无休息 ...

  3. Jenkins中如何自定义构造结果

    jenkis中的触发邮件机制是根据构建成功与否来发邮件,实际上我们在jenkis上定时执行脚本时是需要根据用例的执行结果来触发邮件预警 本文讲叙如何根据用例的执行结果来触发邮件预警 1.在任务配置的b ...

  4. 802.11抓包软件对比之Microsoft Network Monitor

    从事WiFi嵌入式软件开发的同学,802.11协议层抓包分析是一个需要熟练掌握的一个技能,需要通过分析WiFi底层802.11协议层的数据包来定位问题.同时从学习802.11协议的角度而言,最有效的学 ...

  5. # 夏普R shv39 0基础精简优化指南

    手机介绍 夏普AQUOS R是目前市面上用户数量和好评数量都非常多的一款产品.它性价比极高,适合各个年龄段的用户选择来满足办公或者家用或者娱乐等不同方面的需求.目前闲鱼价格在400左右,搭载骁龙835 ...

  6. cheat.sh在手,天下我有

    前言 作为程序员需要了解的东西有很多,日常编码和写脚本脱离不开各式语言与 Linux 命令.为了记住一些杂乱的或不被经常使用的知识点,我们迫切需要一个"小抄"/备忘录,小抄内容多了 ...

  7. 15_Android文件读写操作

    1. 文件的基本操作 File类的相关技巧和操作:文件的创建.重命名和删除,文件夹的创建和删除等操作. 1 package control; 2 3 import java.io.File; 4 5 ...

  8. 团队作业第六次——Beta冲刺

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范与计划 代码 ...

  9. 分布式系统唯一ID

    一 什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息, ...

  10. 【NOIP2017提高A组模拟9.7】JZOJ 计数题

    [NOIP2017提高A组模拟9.7]JZOJ 计数题 题目 Description Input Output Sample Input 5 2 2 3 4 5 Sample Output 8 6 D ...