go语言圣经-声明
1.四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明
2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名字就只能在函数内部很小的范围被访问

go语言圣经-变量
1.var 变量名字 类型 = 表达式
2.零值初始化机制,数值类型零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil
3.同时声明一组变量,用逗号分隔
4.简短变量声明 := ,只有对已经在同级词法域声明过的变量才和赋值操作语句等价
5.一个指针的值是另一个变量的地址,指针名字为p,那么可以说“p指针指向变量x”,或者说“p指针保存了x变量的内存地址”
6.聚合类型每个成员,可以被取地址
7.函数返回局部变量的地址也是安全的
8.将指针作为参数调用函数,那将可以在函数中通过该指针来更新变量的值。
9.我们对一个变量取地址,或者复制指针,我们都是为原变量创建了新的别名
10.指针是实现标准库中flag包的关键技术,它使用命令行参数来设置对应变量的值
11.另一个创建变量的方法是调用用内建的new函数,new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为*T
12.变量的生命周期指的是在程序运行期间变量有效存在的时间间隔
13.从每个包级的变量和每个当前运行函数的每一个局部变量开始,通过指针或引用的访问路径遍历,是否可以找到该变量。如果不存在这样的访问路径,那么说明该变量是不可达的,也就是说它是否存在并不会影响程序后续的计算结果
14.一个循环迭代内部的局部变量的生命周期可能超出其局部作用域。同时,局部变量可能在函数返回之后依然存在。
15.局部变量从函数中逃逸,该局部变量必须在堆上分配

go语言圣经-赋值
1.元组赋值是另一种形式的赋值语句,它允许同时更新多个变量的值,用法交换两个变量的值
2.最大公约数(GCD算法),计算斐波纳契数列(Fibonacci)的第N个数 更加简洁
3.表达式太复杂的话,应该尽量避免过度使用元组赋值;调用一个有多个返回值的函数,可以使用元组赋值,额外的返回值来表达某种错误类型,可以用下划线空白标识符_来丢弃不需要的值
4.程序中还有很多地方会发生隐式的赋值行为:函数传参,复合类型的字面量

go语言圣经-类型
1.type 类型名字 底层类型 类型声明语句
2.类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在外部包也可以使用
3.命名类型还可以为该类型的值定义新的行为
4.许多类型都会定义一个String方法,因为当使用fmt包的打印方法时,将会优先使用该类型对应的String方法返回的结果打印
5.显式转型操作,每一个类型T,都有一个对应的类型转换操作T(x),用于将x转为T类型

go语言圣经-包和文件
1.Go语言中的包和其他语言的库或模块的概念类似,目的都是为了支持模块化、封装、单独编译和代码重用
2.每个包都对应一个独立的名字空间
3.如果一个名字是大写字母开头的,那么该名字是导出的

练习 2.1: 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位间隔是一样的。

1.设置GOPATH
export GOPATH=$HOME/gobook
2.
将要导入的包源代码放在 GOPATH/src/包名 这个目录下

/home/ubuntu/gobook/src/tempconv/tempconv.go

package tempconv
import(
"fmt"
)
//摄氏度类型声明
type Ce float64
//Kelvin类型
type Kelvin float64 //常量声明
const (
FreezingK Kelvin=0// 结冰点温度
Boilingk Kelvin=100// 沸水温度
AbsoluteZeroK Kelvin=-273.15//Kelvin的绝对零度
) //摄氏度转成Kelvin
func CtoK(c Ce) Kelvin{
c=c+273.15
//显式类型转换
return Kelvin(c)
}
//Kelvin转成摄氏度
func KtoC(k Kelvin) Ce{
k=k-273.15
//显式类型转换
return Ce(k)
}
//类型的String方法
func (c Ce)String() string{
return fmt.Sprintf("%g °c",c)
}
//Kelvin类型的String方法
func (k Kelvin)String() string{
return fmt.Sprintf("%g °k",k)
}

test.go导入调用上面的包

package main
import(
"tempconv"
"fmt"
)
func main(){ //练习 2.1: 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位
间隔是一样的。
//显式类型转换
a:=tempconv.Ce(tempconv.AbsoluteZeroK) b:=tempconv.CtoK(a)
fmt.Println(b)
c:=tempconv.KtoC(100)
fmt.Println(c)
}

  

  

[日常] go语言圣经-声明,变量,赋值,类型,包和文件习题的更多相关文章

  1. [日常] Go语言圣经--接口约定习题

    Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自 ...

  2. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...

  3. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

  4. [日常] Go语言圣经--作用域,基础数据类型,整型

    go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...

  5. [日常] Go语言圣经-WEB服务与习题

    Go语言圣经-web服务 1.Web服务程序,标准库里的方法已经帮我们完成了大量工作 2.main函数将所有发送到/路径下的请求和handler函数关联起来,/开头的请求其实就是所有发送到当前站点上的 ...

  6. [日常] Go语言圣经-Panic异常,Recover捕获异常习题

    Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...

  7. [日常] Go语言圣经-匿名函数习题

    Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...

  8. [日常] Go语言圣经前言

    https://books.studygolang.com/gopl-zh/ go语言圣经 1.Go语言有时候被描述为“C类似语言”,或者是“21世纪的C语言”. 2.Go语言中和并发编程相关的特性是 ...

  9. 007-declare 声明变量的类型

    declare [+/-] [选项] 变量名 - 给变量设定类型 + 取消变量的类型 -a 将变量声明为数组型 -i 将变量声明为整形 -x 将变量声明成环境变量 -r 将变量声明为只读变量 -p 显 ...

随机推荐

  1. SignalR 设计理念(一)

    SignalR 设计理念(一) 实现客户端和服务器端的实时通讯. 问题阐述 客户端提供的方法不确定! 客户端的方法参数不确定! 不同的名称和参数要分别调用指定的方法! 调用客户端方法时,忽略大小写! ...

  2. 堆排序(大顶堆、小顶堆)----C语言

    堆排序 之前的随笔写了栈(顺序栈.链式栈).队列(循环队列.链式队列).链表.二叉树,这次随笔来写堆 1.什么是堆? 堆是一种非线性结构,(本篇随笔主要分析堆的数组实现)可以把堆看作一个数组,也可以被 ...

  3. 转---如何让前端更安全?——XSS攻击和防御详解

    前言 平时很少关注安全这块的技术,曾经也买过一本<Web前端黑客技术揭秘>但至今还没翻过,尴尬.今天的早读文章由腾讯优测@小吉带来的分享. 正文从这开始~ 最近深入了解了一下XSS攻击.以 ...

  4. SSH 学习笔记

    零.背景 在看 pm2 的 deploy 功能的时候,对 ssh 的不熟悉导致错误频出,包括之前对 github 的配置也用到了 SSH,所以找个机会整理一下. 一.介绍 SSH 是每一台 Linux ...

  5. SubLime Text 3 配置SublimeREPL来交互式调试程序

    1. 安装 SublimeREPL 插件 等待一下,输入sublimerepl,选择sublimeREPL,然后它就会在后台安装. 安装完之后,查看如下图 选择你要执行的*.py文件,通过这个路径,选 ...

  6. postgresql-递增uuid优点

    递增uuid的优点: https://blog.2ndquadrant.com/on-the-impact-of-full-page-writes/ 减小wal生成  

  7. [Leetcode]120.三角形路径最小和

    ---恢复内容开始--- 题目的链接 简单的动态规划题,使用了二维dp数组就能很好的表示. 由于有边界的问题,所以这个dp数组为 dp[n+1][n+1]. dp[i][j]意思是终点为(i-1,j- ...

  8. (转)python协程2:yield from 从入门到精通

    原文:http://blog.gusibi.com/post/python-coroutine-yield-from/ https://mp.weixin.qq.com/s?__biz=MzAwNjI ...

  9. python处理json格式的数据

    这里我就不介绍json了,不知道json的同学可以去百度一下json,首先我们的json的格式如下,这个json有点长,这个json来自我以前的一个小任务,具体看这里:http://www.cnblo ...

  10. 公共技术点( View 事件传递)

    转载地址:http://p.codekk.com/blogs/detail/54cfab086c4761e5001b253e 本文为 Android 开源项目源码解析 公共技术点中的 View 事件传 ...