Go漫游笔记-04-流程控制

条件语句

if-else

结构上 Java 的 if-else 语句类似,但是,也有一些明显的区别:

  • 条件表达式可以省略 ()

    1
    2
    3
    4
    5
    if a > 0 {
    // some code
    } else {
    // some code
    }
  • 支持初始化语句,位于条件语句之前,使用 ; 分隔!

    1
    2
    3
    if b := 0; a > 0 {
    a = b
    }
  • 语句体必须{} 包裹起来,并且 { 必须与 ifelse 位于同一行。

    1
    2
    3
    4
    if a > 0   // syntax error: missing { after if clause
    {
    // some code
    }
  • 由于 1.1 以下的版本无法解析出 else 中的返回值,因此,使用低版本开发的时候需要注意以下代码,会编译失败:

    1
    2
    3
    4
    5
    6
    7
    func isEven(integer int32) bool {
    if integer%2 == 0 {
    return true
    } else {
    return false // 1.1 以后没问题
    }
    }

另外,目前 Go 语言还不支持三元操作符: x > y ? true : false ,有点遗憾。

阅读全文 »

Go漫游笔记-03-变量和常量

变量

我们知道,变量是程序的基本组成元素,我们可以通过定义变量,来申请和使用数据的存储空间。

声明

Go 声明变量的语法与 Java 是不一样的,需要关键字 var ,并且,先写变量名,再写类型名称。

1
2
3
4
5
6
7
8
9
// 定义单变量
var v int32 // 自动初始为零值

// 同时定义多个变量
var a, b, c int32
var (
x int32
y float32
)
阅读全文 »

Go漫游笔记-02-类型

Go 是一门静态类型语言,不能在运行期改变变量的类型。
声明一个变量,首先也需要明确它的类型。
因此,我们先来看看 Go 支持的类型都有哪些?

布尔类型

1
var v bool        // true, false
阅读全文 »

Go漫游笔记-01-初次见面

Go 编程语言

What is Go

官方的介绍很简单:

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

翻译过来就是:

Go 是一个开源的编程语言,它能够让我们更加容易地构建简单、可靠、高效的软件。

从这个非常简短的介绍中,我们能够知道:

  • 首先,Go 是开源的,也就是说任何人都可以查看 Go 语言的源代码,并且,它采用的协议是 BSD ,这是一个相对自由的协议,对商业友好。
  • 其次,Go 语言的目标是用来构建简单、可靠、高效的软件。在接下来的 “旅程” 中,我们不妨以此为参照,从各个方面来考量一下它,看看它是否能够兑现自己的承诺。
阅读全文 »

Java漫游笔记-15-JVM

JVM(Java 虚拟机,Java Virtual Machine)是整个 Java 平台的基石,是 Java 实现平台无关(不依赖于特定硬件和操作系统)的关键部分,是 Java 语言的运行平台,也是保障用户机器免受恶意代码损害的保护屏障。
要学好、用好 Java ,JVM 是我们绕不过去的一道槛。

阅读全文 »

Java漫游笔记-14-RMI和WebService

很多时候,我们应用程序所有的组件都在同一台主机的同一个 JVM 中运行。
然而,有的时候,基于一些原因(例如:性能、安全),我们也会把程序的某些部分分别部署在不同的机器上。
这时候,我们就不得不考虑这些分布在不同机器上的组件(或是子系统)应如何通信,来共同实现业务功能。
在 Java 中,组件间要通信,可以基于消息的方式实现,也可以基于远程调用的方式实现。
前面学习过的 TCP/IP 、UDP/IP 编程,就可以实现不同主机间的通信。
但是,这样一来,我们就需要处理网络连接、数据收发 以及 Java 对象的序列化等一系列的问题。想想就头大。
如果能够取得远程对象的引用就好了,因为这样我们就可以直接调用它的方法,就好像大家都在同一个 JVM 中。
这就是 RMI(远程方法调用,Remote Method Invocation)提供给我们的功能。

阅读全文 »

Java漫游笔记-13-注解

什么是注解

注解(Annotation,有的地方也翻译为注释,但是我觉得这样会和我们一般理解的注释混淆) 是 JDK 1.5 引入的新特性。
在 API 文档中有写到:注解是一种接口。其实,这并不好理解。但我们可以从它的声明方式中看出一二:

1
2
3
public @interface AnnotationName {
String value() default ""
}

实际上,我更喜欢这样理解:注解是一种元数据工具,或者说是我们给代码打的一个标记。

阅读全文 »

Java漫游笔记-12-数据库编程

JDBC 架构

数据库是独立于我们开发的应用程序的一个软件,应用程序必须通过特定的通信协议才能与数据库进行沟通。
由于数据库产品众多,并且它们所使用的协议也各不相同。想要通过扩展 Java 语言,去适配每一个数据库,显然是不可能完成的任务。即使可以做得到,这种做法也是异常脆弱的,因为一旦数据库厂商对协议进行修改,那么 Java 语言也将面临修改。
为了解决这个问题,需要对应用程序和数据库软件进行解耦。而解耦最简单的方法,当然就是在这二者之间再加一层。这一层就是 JDBC 。
JDBC 的设计主要基于这样的思想:首先,Java 提供一套标准的 API 和一个驱动管理器,并允许数据库厂商向驱动管理器注册(按照规范实现的)数据库驱动程序。然后,Java 开发者就可以根据 API 编写应用程序,与驱动管理器进行通信,而驱动管理器再通过驱动程序与实际的数据库进行通信,从而最终实现操作数据库的目的。
这样的好处是:对于开发者而言,不再需要了解特定数据库的 API 。并且,如果需要更换数据库产品,只需要更换相应的数据库驱动即可(当然,这只是理想的情况,实际上,如果在程序中使用了数据库相关的特性,代码还是要做相应的修改)。

阅读全文 »

Java漫游笔记-11-网络编程

TCP 编程

Java 为 TCP 协议提供了两个类:ServerSocketSocket 类。
编程的步骤大致如下:

  1. 创建服务器套接字 ServerSocket ,并将其绑定到特定地址(IP 地址和端口号)。
  2. 调用 accept() 方法,侦听并接受到此套接字的连接。
  3. 创建客户端套接字 Socket ,并将其连接到指定的地址。
  4. 连接建立后,Socket 可以通过 getOutputStream() 获取输出流,向服务端发送数据。同时,ServerSocket 则可以通过 getInputStream() 获取输入流,来读取客户端的数据。
  5. 类似的,ServerSocket 可以通过 getOutputStream() 获取输出流,向客户端发送数据。Socket 也可以通过 getInputStream() 获取输入流,来读取服务器的数据。
  6. 最后,当然还需要关闭连接。
阅读全文 »

Java漫游笔记-10-IO

所谓“流”,就是数据(字节或者是字符)的有序排列。

输入流和输出流

如果按照流动的方向来划分,流可以分为:输入流和输出流。
这里的输入和输出都是相对 Java 程序而言的。
Java 程序从输入流读取数据,向输出流写入数据

输入流和输出流

字节流和字符流

如果按照数据类型进行划分,流又可以分为:字节流和字符流。
字节流:数据流中最小的数据单元是字节(byte)。
字符流:数据流中最小的数据单元是字符(char,Java 采用 Unicode 编码, 1 char = 2 byte)。

阅读全文 »