大概14年的时候go语言的开发者就提过android平台会引入go开发,GO语言的1.5版本也发布了go mobile。现在够发布到1.8预览版了,该学学go了,不然被落下太多了。
老规矩,先来个hello world!
// godemo1
/*
Author by zhangpeng
*/
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
运行结果:
C:/Go/bin/go.exe run godemo1.go [E:/GoTest] Hello World 成功: 进程退出代码 0.
哇擦雷,代码里竟然没有分号!其实,和C一样,Go的正式的语法使用分号来终止语句。和C不同的是,这些分号由词法分析器在扫描源代码过程中使用简单的规则自动插入分号,因此输入源代码多数时候就不需要分号了。
规则是这样的:如果在一个新行前方的最后一个标记是一个标识符(包括像int
和float64
这样的单词)、一个基本的如数值这样的文字、或以下标记中的一个时,会自动插入分号:
break continue fallthrough return ++ -- ) }
通常Go程序仅在for
循环语句中使用分号,以此来分开初始化器、条件和增量单元。如果你在一行中写多个语句,也需要用分号分开。
注意:无论任何时候,你都不应该将一个控制结构((if
、for
、switch
或select
)的左大括号放在下一行。如果这样做,将会在大括号的前方插入一个分号,这可能导致出现不想要的结果。
Go中的类型可以分类如下:
编号 | 类型和说明 |
---|---|
1 | 布尔类型 - 它们是布尔类型,由两个预定义常量组成:(a)true (b)false |
2 | 数字类型 - 它们是算术类型,在整个程序中表示:a)整数类型或 b)浮点值。 |
3 | 字符串类型 - 字符串类型表示字符串值的集合。它的值是一个字节序列。 字符串是不可变的类型,一旦创建后,就不可能改变字符串的内容。预先声明的字符串类型是string 。 |
4 | 派生类型: - 包括(a)指针类型,(b)数组类型,(c)结构类型,(d)联合类型和(e)函数类型(f)切片类型(g)函数类型(h)接口类型(i) 类型 |
数组类型和结构类型统称为聚合类型。函数的类型指定具有相同参数和结果类型的所有函数的集合。我们将在下一节中看到基本类型,而其他类型将在后续章节中介绍。
预定义与体系结构无关的整数类型是:
编号 | 类型和说明 |
---|---|
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位浮点数 |
2 | float64 - IEEE-754 64位浮点数 |
3 | complex64 - 复数带有float32 实部和虚部 |
4 | complex128 - 复数带有float64实部和虚部 |
n
位整数的值是n
位,并且使用二进制补码算术运算来表示。
其他数字类型
还有一组具有特定大小的数字类型:
编号 | 类型和说明 |
---|---|
1 | byte - 与uint8 相同 |
2 | rune - 与int32 相同 |
3 | uint - 32或64位 |
4 | int - 与uint 大小相同 |
5 | uintptr - 无符号整数,用于存储指针值的未解释位 |
变量和常量
变量的声明很像 javascript,使用 var关键字。
//声明初始化一个变量
var x int = 888
var str string = "hello world"
//声明初始化多个变量
var i, j, k int = 1, 2, 3
//不用指明类型,通过初始化值来推导
var b = false//bool型
还有一种定义变量的方式
x := 888 //相当于 var x int = 888
常量很简单,使用const关键字:const s string = "hello world"
const pi float32 = 3.1415926
数组
func main() {
var a [5]int
fmt.Println("array a:", a)
a[1] = 10
a[3] = 30
fmt.Println("fangwifi:", a)
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println("init:", b)
var c [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
c[i][j] = i + j
}
}
fmt.Println("2d: ", c)
}
运行结果:
array a: [0 0 0 0 0]
fangwifi: [0 10 0 30 0]
len: 5
init: [1 2 3 4 5]
2d: [[0 1 2] [1 2 3]]
数组的切片操作
a := [5]int{1, 2, 3, 4, 5}
b := a[2:4] // a[2] 和 a[3],但不包括a[4]
fmt.Println(b)
b = a[:4] // 从 a[0]到a[4],但不包括a[4]
fmt.Println(b)
b = a[2:] // 从 a[2]到a[4],且包括a[2]
fmt.Println(b)
if语句分支循环语句
注意:if 语句没有圆括号,而必需要有花括号
//if 语句
if x % 2 == 0 {
//do anything
}
//if - else
if x % 2 == 0 {
//偶数...
} else {
//奇数...
}
//多分支
if num < 0 {
//负数
} else if num == 0 {
//零
} else {
//正数
}
注意:switch语句没有break,还可以使用逗号case多个值switch 语句
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4,5,6:
fmt.Println("four, five, six")
default:
fmt.Println("invalid value!")
}
前面你已见过了,下面再来看看for的三种形式:(注意:Go语言中没有while)for 语句
//经典的for语句 init; condition; post
for i := 0; i<10; i++{
fmt.Println(i)
}
//精简的for语句 condition
i := 1
for i<10 {
fmt.Println(i)
i++
}
//死循环的for语句 相当于for(;;)
i :=1
for {
if i>10 {
break
}
i++
}
先做一个最简单的接触,语法不难但是和java相比还是有一些不同,需要多熟悉一下。
转载于:https://blog.51cto.com/itzhongxin/1911785