• 你好,Go


    你好,Go

    Go语言是一门类似C语言的编译型语言,它的编译速度非常快。这门语言的关键字一共25个,比所有英文字母还少一个,这对于我们的学习来说非常有利。先让我们看一看这些关键字都长什么样。

    break    default     func    interface    select

    case     defer        go     map          struct

    chan     else         goto   package      switch

    const    fallthrough if      range        type

    continue for          import  return      var

    本章中,笔者将带领你去学习Go语言的基础。通过每一小节的介绍,你将发现,Go语言的世界是多么简洁,设计是如此美妙,编写Go语言将会是一件愉快的事情。等回过头来,你就会发现这25个关键字是多么亲切。

    在开始编写应用之前,我们先从最基本的程序开始。就像你造房子之前不知道什么是地基一样,编写程序也不知道如何开始。因此,在本节中,我们要学习用最基本的语法让Go语言程序运行起来。

    程序

    这就像一个传统,在学习大部分语言之前,你先学会如何编写一个可以输出Hello World的程序。

    准备好了吗?让我们开始吧!

    package main

    import "fmt"

    func main() {

        fmt.Printf("Hello, world or 你好,世界 or καλημ ́ρα κóσμor こんにちは世界\n")

    }

    输出如下。

    Hello, world or 你好,世界 or καλημ ́ρα κóσμor こんにちは世界

    详解

    首先我们要了解一个概念,Go语言程序是通过package来组织的。

    package <pkgName>(在我们的例子中是package main)这一行告诉我们当前文件属于哪个包,而包名main则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。除了main包之外,其他 的包最后都会生成*.a文件(也就是包文件),并放置在$GOPATH/pkg/$GOOS_$GOARCH中(以Mac为例就是$GOPATH/pkg /darwin_amd64)。

    每一个可独立运行的Go语言程序,必定包含一个package main,在这个main包中必定包含一个入口函数main,而这个函数既没有参数,也没有返回值。

    为了打印Hello, World...,我们调用了一个函数Printf,这个函数来自于fmt包,所以我们在第三行中导入了系统级别的fmt包:import"fmt"。

    包的概念和Python中的module相同,它们都有一些特别的好处:模块化(能够把程序分成多个模块)和可重用性(每个模块都能被其他应用程序反复使用)。我们在这里只是先了解一下包的概念,后面我们将会编写自己的包。

    在第五行,我们通过关键字func定义了一个main函数,函数体被放在{}中,就像我们平时写C、C++或Java时一样。大家可以看到main函数是没有任何参数的,我们接下来就学习如何编写带参数的、返回0个或多个值的函数。

    第六行,我们调用了fmt包里面定义的函数Printf。大家可以看到,这个函数通过<pkgName>.<funcName>的方式调用,这一点和Python十分相似。

    前面提到过,包名和包所在的文件夹名可以是不同的,此处的<pkgName>即为通过package<pkgName>声明的包名,而非文件夹名。

    最后大家可以看到我们输出的内容里面包含了很多非ASCII码字符。实际上,Go语言是天生支持UTF-8的,任何字符都可以直接输出,你甚至可以用UTF-8中的任何字符作为标识符。

    小结

    Go 语言使用package(和Python的模块类似)来组织代码。main.main()函数(这个函数主要位于主包)是每一个独立的可运行程序的入口 点。Go语言使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go语言的发明者),所以它天生就具有多语言的支持。

    Go语言基础

     

    定义变量

    Go语言里面定义变量有多种方式。

    使用var关键字是Go语言最基本的定义变量方式,与C语言不同的是Go语言把变量类型放在变量名后面,如下所示。

    //定义一个名称为“variableName”,类型为"type"的变量

    var variableName type

    定义多个变量。

    //定义三个类型都是“type”的三个变量

    var vname1, vname2,vname3 type

    定义变量并初始化值。

    //初始化“variableName”的变量为“value”值,类型是“type”

    var variableName type= value

    同时初始化多个变量。

    /*

        定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值

        vname1为v1,vname2为v2,vname3为v3

    */

    var vname1, vname2, vname3 type= v1, v2, v3

    你是不是觉得上面这样的定义有点繁琐?没关系,因为Go语言的设计者也发现了,有一种写法可以让它变得简单一点。我们可以直接忽略类型声明,那么上面的代码变成如下所示。

    /*

        定义三个变量,它们分别初始化相应的值

        vname1为v1,vname2为v2,vname3为v3

        然后Go会根据其相应值的类型来帮你初始化它们

    */

    var vname1, vname2, vname3 = v1, v2, v3

    你觉得上面的还是有些繁琐?好吧,让我们继续简化。

    /*

        定义三个变量,它们分别初始化相应的值

        vname1为v1,vname2为v2,vname3为v3

        编译器会根据初始化的值自动推导出相应的类型

    */

    vname1, vname2, vname3 := v1, v2, v3

    现在是不是看上去非常简洁了“?:=”这个符号直接取代了var和type,这种形式叫做简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用var方式来定义全局变量。

    _(下画线)是个特殊的变量名,任何赋予它的值都会被丢弃。在这个例子中,我们将值35赋予b,并同时丢弃34。

    _, b := 34, 35

    Go语言对于已声明但未使用的变量会在编译阶段报错,比如下面的代码就会产生一个错误:声明了i但未使用。

    package main

    func main() {

        var i int

    }

    常量

    所谓常量,也就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go语言程序中,常量可定义为数值、布尔值或字符串等类型。

    它的语法如下。

    const constantName =value

    //如果需要,也可以明确指定常量的类型:

    const Pi float32 =3.1415926

    以下是一些常量声明的例子。

    const Pi = 3.1415926

    const i = 10000

    const MaxThread = 10

    const prefix = "astaxie_"

    本文节选自《Go Web编程》一书

    谢孟军 著

    电子工业出版社出版

  • 相关阅读:
    你真的会用Android的Dialog吗?由一个Exception想到的
    请慎用java的File#renameTo(File)方法
    Android核心分析(16)Android电话系统概述篇
    java.lang.UnsupportedOperationException
    fastboot 刷新 system.img 出现 data too large 错误
    Android是什么 之三手机之硬件形态
    快速重建system.img
    Android 核心分析 之五 基本空间划分
    Android核心分析之四 手机的软件形态
    Android核心分析(15)Android输入系统之输入路径详解k
  • 原文地址:https://www.cnblogs.com/broadview/p/3070645.html
Copyright © 2020-2023  润新知