第一章:开心学Go语言:部署篇

每一个新语言的产生必然会产生语法的变更。

在我印象中,c#和java 白热化的竞争,着实带给我们很多好处,譬如两者的语法像的一塌糊涂,所以从c#屌丝转换为java屌丝只需熟悉熟悉各种库的用法即可。

然后做习了php 这时突然转到Go语言,就有很大压力了。

我的建议是,先了解最最基本和常用的语法。在实际学习和演练中慢慢了解其他语法,不要一下子把Go的语法全部掌握,一个是时间耗费的太长,另外一个是会导致你前学后忘。

接下来我们进入正式学习篇。

一、变量申明

php是弱类型语言,一般一个货色拿过来可以直接赋值如 $a=1 $a=”你好“

c#和java是强类型语言,一般变量必须申明类型,如果不知道那至少得申明为 object

Go语言是超强类型语言,怎么个超强法?超强到int16 和int32 它都认为不能互相进行相加

所以要熟悉GO 必须先知道怎么申明变量

在Go中,是使用var 来做申明的,和javascript的申明方法 很类似。

譬如


package main
import (
    "fmt"  //这个包别告诉我你忘了
)
func main() {
    var a int   //申明一个变量 a 是int型的
    a = 3
    fmt.Printf("number is %d", a) //打印出 a的值
}


以上有几个注意点: var a int 代表申明a是int型的变量

如果你特别懒,不像申明,想像php那样直接使用 也不是不可以



package main

import (
	"fmt"
)
func main() {
	a := 3 //好习惯要养成,最好是申明类型
	fmt.Printf("nunber is %d", a)
}



语法注意点:

1、代码不要分号。其实GO语言是要分号的,但是Go编译器在编译的时候自动会帮你添加分号。如果你加了分号,其实等于每句代码后有两个分号。就出错了

2、c#中是 int a=3.GO语言反过来写,一开始不会太适应。慢慢就好了。

var a int = 3

var a int 换行 写a=3

a:=3

以上三句 都一样

 

下面有个常见点:大部分出现在你在windows编写代码时出现


package main

import (
	"fmt"
)
func main() {
	fmt.Printf("我是一个程序员")

}


 

你会发现编译出错,那是因为你在windows随手 创建的txt文本是unicode编码,而GO语言必须使用Utf8编码,所以你必须把该txt另存为无Bom的utf8文件(记住是无bom的utf8 文件,仅仅是utf8是不行的。bom是windows特有的,人家都不太鸟微软的)

 

二、类型转换

Go语言的类型转换不是一般的麻烦

如:

a:=1

var b string

这时想把 a转换为字符串 和b 想加。那么就需要把a转换为string型。

注意:Go语言类型转换 是有专门的转换方法的,强制转换在Go中根本行不通



package main

import (
	"fmt"
	"strconv" //这个包就是专用来干 类型转换的事情的
)

func main() {
	a := 100
	var b string
	b = "开心学Go语言"
	b = b + strconv.Itoa(a) + "天"   //strconv.Itoa就是把整形转换为字符串
	fmt.Printf(b)

}


 

strconv.Itoa就是把整形转换为字符串,注意它仅仅只能干整形转换为字符串这样的事。

要转行Float 必须使用 strconv.FormatFloat 函数

这里再体现一个GO语言的超强类型


package main

import (
	"fmt"
	"strconv" //这里也要注意,如果下面程序中没有使用到 这个包,编译会出错 
)

func main() {
	a := 100
	var c int32 = 20
	d := a + int(c)  //注意这里,int32和int不能互相相加 必须转换
	fmt.Printf("相加结果是%d", d)

}


 

这种语法限制很好,虽然写起来很繁琐,但是程序员性能会很高。不像PHP,人家都说PHP写出来的程序很”脏“,到处有未使用的变量和定义函数,从一定程度上是消耗了性能,虽然有时我们肉眼看不出来。

这里顺便讲一个php要点

往往我们在写函数时,需要加个判断


if ( ! function_exists( 'somefunction' ) ):
  function somefunciont()
  {
  ......
   }
endif;

 

这样做的好处是,防止函数重定义。这在公共平台中允许大家一起写函数插件时很有用。

 

三、数组

GO的数组定义还是很清晰的。

如:

 


package main

import (
	"fmt"
)
func main() {
	a := [5]int{1, 2, 3, 4, 5} //手动赋值
	fmt.Print(a)
}

 

如果不需要手动赋值,要动态赋值,那么可以这样


package main

import (
	"fmt"
)
func main() {

	var a [5]int   //注意这里不能写成 a:=[5]int   
	a[0] = 1
	a[1] = 2
	fmt.Print(a)
}


 

这里代表,初始化一个数组a,里面有5个元素,动态赋值第一个和第二个元素值为1和2,

GO编译器会自动把 剩余的3个元素 赋值为 0,0,0

这里介绍一个数据切片功能,一看就能懂。



package main

import (
	"fmt"
)

func main() {

	var a [5]int
	a[0] = 1
	a[1] = 2
	fmt.Print(a[1:3]) //输出 a[1] 和 a[3] 两个值
	fmt.Print(a[:3])  // 输出  a[0] a[1] a[2]  注意不包括 a[3]
	fmt.Print(a[1:])  //输出  a[1] a[2] a[3] a[4] 
}


 

好了,基本语法 先到这。大家肯定要讲,还有很多啊。如if 判断,for循环等等。

其实不用着急学这个。下一章我们来做一个 简单的函数,顺手就学到了这些基本语法。

注意:还是那句话,一次不要学太多。 尤其是像if for循环。现在学它干嘛?又没有上手开始写代码。

数组是要先学的。任何语言,上手首先要学的就是数组。这叫跳跃式学习方法。

好,敬请大家等待一章,不会很久哦。。。 下一章带领大家写几个我们常用的应用函数。