Chinaunix首页 | 论坛 | 博客
  • 博客访问: 223405
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 482
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-18 14:14
个人简介

小菜鸟

文章分类

全部博文(46)

文章存档

2020年(2)

2017年(7)

2016年(36)

2014年(1)

我的朋友

分类: LINUX

2016-03-28 15:28:57

Go 语言教程笔记(一)
一 Go 语言环境设置 

本地环境设置

在这里我们介绍设置Go编程语言环境,需要在你的计算机上的准备以下两个软件,(A)文本编

辑器和(B)Go编译器。

文本编辑器

我的环境是ubuntu,直接用 vim

Go编译器

ubuntu下面直接安装

# apt-get install golang


例子:

# vim hello.go

  1 package main

  2 

  3 import fmt "fmt"

  4 

  5 func main() {

  6     fmt.Printf("Hello, world; or Καλημ?ρα κ?σμε; or こんにちは 世界 ");

  7 }                                                                        

go语言中如果有if等后面需要跟大括号的语句,强制使用大扩号跟if写在一行


编译运行:

# go run hello.go 

Hello, world; or Καλημ?ρα κ?σμε; or こんにちは 世界


二 Go 语言程序结构 

在我们学习Go编程语言的基本构建模块,看看一个最低限度的Go程序结构,这样我们

就可以把它作为即将到来的章节的参考。

Go 程序包含以下部分

包声明

导入包

函数

变量

语句和表达式

注释

例如:

 1 package main

  2 

  3 import fmt "fmt"

  4 

  5 func main() {

  6     fmt.Printf("Hello, world; or Καλημ?ρα κ?σμε; or こんにちは 世界 ");

  7 }  

第一行定义了这个程序包的名称。这是一个必须声明为Go程序运行在什么包。main包是起始

点来运行程序。每个包都有一个与之关联的路径和名称。

下一行import "fmt" 是告诉编译器去包含文件在包fmt的预处理命令。

下一行 func main()主要功能是为程序执行的开始。

如果有注释,/*...*/会被编译器被忽略,它已被加入到程序添加注释。因此,这样的行称为程

序中的注释。注释也使用//类似于Java或C++注释。

下一行 fmt.Println(...)是提供另一种功能,使消息“Hello, World!”要显示在屏幕上。这

里fmt包已导出。


三 Go 语言的基本语法

标识符

Go语言不允许标识符中的标点字符,如@,$和%。

Go是一种区分大小写的编程语言

Manpower 和 manpower 在Go中是两个不同的标识符

标识符开始以字母A到Z或a到z或下划线_后跟零个或多个字母,下划线和数字(0?9)

关键词

下面的列表显示了Go的保留字。这些保留的字可以不被用作常量或变量,或任何其他的标识符

名称。

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编译器完全忽略它。

var age int;

必须有至少一个空白字符(通常是一个空格)int和age之间的编译器,以便能够区分它们

fruit = apples + oranges;   // get the total fruit

fruit和=之间或=和apples,虽然是自由的,如果想便于阅读的目的,最好包括一些空格


四 Go 语言数据类型

在Go编程语言,数据类型指用于声明变量或不同类型的功能的广泛的系统。变量的类型决定了

有多少空间占用的存储和存储方式的位模式将被解释。

Go的数据类型可分类如下:

Boolean Types

它们是布尔类型,它由两个预定义的常量:(a) true (b) false

Numeric Types

它们是算术类型,表示整数类型或b。在整个程序浮点值

string types:

一个字符串类型代表组字符串值。它的值是一个字节序列。字符串是一次创造了稳定的类型,

这是不可能改变一个字符串的内容。预声明的字符串类型为字符串。

Derived types:

它们包括:(a)指针类型,(b)数组类型,(c)结构类型,(d)联盟类型及(e)函数类型(f)切片类(g)

函数类型(h)接口类型(i)地图类型(j)管道类型。

数组类型和结构类型被统称为聚合类型。函数的类型指定的一组具有相同的参数和结果类型所

有函数。

整数

1 uint8

8位无符号整数 (0 - 255)

2 uint16

16位无符号整数 (0 - 65535)

3 uint32

32位无符号整数 (0 - 4294967295)

4  uint64

64位无符号整数 (0 - 18446744073709551615)

5  int8

有符号8位整数 (-128 - 127)

6  int16

有符号16位整数 (-32768 - 32767)

7  int32

有符号的32位整数 (-2147483648 - 2147483647)

8  int64

有符号的64位整数 (-9223372036854775808 - 9223372036854775807)

浮点类型

1  float32

IEEE-754 32-bit 浮点数

2  float64

IEEE-754 64-bit 浮点数

3  complex64

复数与float32实部和虚部

4  complex128

复数与float64实部和虚部

其他数值类型

1  byte

相同于 uint8

2  rune

相同于 int32

3  uint

32 或 64 位

4  int

相同于 uint 的大小

5  uintptr

一个无符号整数来存储指针值的解释的比特位


五 Go 语言变量

变量是什么,只不是给定到存储区域,我们的程序可以操纵的名称。在Go中每个变量具有特定

的类型,它确定的大小和可变的存储器的布局;能确定存储器内存储的值的范围;和组操作可以施

加到变量。

一个变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因

为Go是区分大小写的。基于该基本类型在前面的章节中说明的那样,将有以下基本变量类型:

byte  通常单个字节(一个字节),这是一个字节的类型

int  整数最自然的尺寸的机器

float32  单精度浮点值

Go编程语言也可以定义各种其他类型的变量,我们将在以后的章节列出,如:枚举,指针,数

组,结构,联合,等等。

Go中变量定义

var variable_list optional_data_type;

optional_data_type可以包括字节,整型,float32,complex64,布尔或任何用户定义的对象

等有效Go的数据类型,variable_list可以由用逗号分隔的一个或多个标识符名称。一些有效的声

明如下所示:

var    i, j, k int;

var   c, ch byte;

var  f, salary float32;

d = 42;

var i, j, k; 既声明并定义了变量i,j和k;这指示编译器创建一个名为i,j和k的 int类型变量。变量

可以再声明时候初始化。变量的类型是由编译器自动根据传递给它的值判断。

variable_name = value;

d = 3, f = 5;    // declaration of d and f. Here d and f are int 

对于没有初始化定义:具有静态存储时间变量的隐含零初始化(所有字节的值为0);所有其它变量

的初始值是它们的数据类型的零值。

静态类型声明

package main

import "fmt"

func main() {

   var x float64

   x = 20.0

   fmt.Println(x)

   fmt.Printf("x is of type %T ", x)

}

编译运行结果是:

20

x is of type float64

动态类型声明/类型推断

示例

试试下面的例子,其中的变量已经声明没有任何类型的,并已确定在主函数中初始化。如果类型推断的,我们已经初始化的变量y使用:=运算符,x初始化使用=运算符。

package main

import "fmt"

func main() {

   var x float64 = 20.0

   y := 42 

   fmt.Println(x)

   fmt.Println(y)

   fmt.Printf("x is of type %T ", x)

   fmt.Printf("y is of type %T ", y)  

}

编译和运行上面的程序,这将产生以下结果:

20

42

x is of type float64

y is of type int

混合变量声明

不同类型的变量可以一步到位使用类型推断声明。

package main

import "fmt"

func main() {

   var a, b, c = 3, 4, "foo"  

   fmt.Println(a)

   fmt.Println(b)

   fmt.Println(c)

   fmt.Printf("a is of type %T ", a)

   fmt.Printf("b is of type %T ", b)

   fmt.Printf("c is of type %T ", c)

}

编译和运行上面的程序,这将产生以下结果:

3

4

foo

a is of type int

b is of type int

c is of type string

阅读(1587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~