Go 学习日记 day1

Go 学习日记

Day1

许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。

  • 为了简化设计,不支持函数重载和操作符重载(事实上函数重载和操作符重载在cpp中常常能起到使用的便捷性,因为同一个方法名可以直接套用不同类型的函数,但是这存在着潜在的混乱)
  • 为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换(cpp中的类型转换是一个很大的课题,隐式类型转换所带来的是便利和隐藏的错误,即编辑器做了你不知道是否会同一的事情,他并不和你商量,因此出现了错误比较难以定位)
  • Go 语言通过另一种途径实现面向对象设计(第 10-11 章)来放弃类和类型的继承(面向对象的三大特性:封装、继承和多态,封装各语言差距不多,继承就是千差万别了,多态更是建立在继承的基础上实现)
  • 尽管在接口的使用方面(第 11 章)可以实现类似变体类型的功能,但本身不支持变体类型
  • 不支持动态加载代码
  • 不支持动态链接库(在新的版本中,go已经支持了)
  • 不支持泛型
  • 通过 recover 和 panic 来替代异常机制(第 13.2-3 节)
  • 不支持断言
  • 不支持静态变量

Go 的编译器

  • Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,
  • runtime 主要由 C 语言编写(Go 1.5 开始自举),并且是每个 Go 包的最顶级包。你可以在目录 $GOROOT/src/runtime 中找到相关内容。
  • 关于自举
    就是自己的编译器可以自行编译自己的编译器。
    实现方法就是这个编译器的作者用这个语言的一些特性来编写编译器并在该编译器中支持这些自己使用到的特性。
    首先,第一个编译器肯定是用别的语言写的(不论是C还是Go还是Lisp还是Python),后面的版本才能谈及自举。
    至于先有鸡还是先有蛋,我可以举个这样的不太恰当的例子:比如我写了一个可以自举的C编译器叫作mycc,不论是编译器本身的执行效率还是生成的代码的质量都远远好于gcc(本故事纯属虚构),但我用的都是标准的C写的,那么我可以就直接用gcc编译mycc的源码,得到一份可以生成高质量代码但本身执行效率低下的mycc,然后当然如果我再用这个生成的mycc编译mycc的源码得到新的一份mycc,新的这份不光会产生和原来那份同等高质量的代码,而且还能拥有比先前版本更高的执行效率(因为前一份是gcc的编译产物,后一份是mycc的编译产物,而mycc生成的代码质量要远好于gcc的)。故事虽然是虚构的,但是道理差不多就是这么个道理。这也就是为什么如果从源码编译安装新版本的gcc的话,往往会“编译——安装”两到三遍的原因。

文件名、关键字和标识符

有效的标识符必须以字符(可以使用任何 UTF-8 编码的字符或 _)开头,然后紧跟着 0 个或多个字符或 Unicode 数字,如:X56、group1、_x23、i、өԑ12。
_ 本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。

以下是无效的标识符:

  • 1ab(以数字开头)
  • case(Go 语言的关键字)
  • a+b(运算符是不允许的)

25个关键字或保留字

  • break
  • default
  • func
  • interface
  • select
  • case
  • defer
  • go
  • map
  • struct
  • chan
  • else
  • goto
  • packge
  • switch
  • const
  • fallthrough
  • if
  • range
  • type
  • continue
  • for
  • import
  • return
  • var

程序一般由关键字、常量、变量、运算符、类型和函数组成。
每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。

Go 程序的基本结构和要素

包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。

你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

我的各种碎碎念,都会记录在公众号上
Go 学习日记 day1_第1张图片

你可能感兴趣的:(go学习日记)