第一章:开心学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循环。现在学它干嘛?又没有上手开始写代码。
数组是要先学的。任何语言,上手首先要学的就是数组。这叫跳跃式学习方法。
好,敬请大家等待一章,不会很久哦。。。 下一章带领大家写几个我们常用的应用函数。