AI智能
改变未来

Go基础语法


GO

简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

基础语法

Hello World

对于一个新建的Go文件,它是长这个样子的

package mainfunc main(){}

函数的作用域都在包(main)里,我们可以进行输入我们的第一个程序。

package mainimport \"fmt\"func main() {fmt.Println(\"Hello,World\")}

要使用当fmt里面的println进行一行一行的打印,而当我们键入fmt时,程序会自动导入“fmt”。

变量

Go语言变量名由字母、数字、下划线组成,首字母不能为数字。
使用关键字 var 定义变量

var name type

这里定义了一个int类型的a和字符类型的s,两个变量都没有赋初值,所以a是0,s是空串
Go语言定义的变量必须要使用,不然会出错

var a intvar s stringfmt.Println(a,s)

还可以同时给多个变量赋指,
也可以不使用var关键字,使用**:=**让程序自动去判断类型。

var a,b,c,s = 3,4,true,\"def\"a,b,c,s:=3,4,true,\"def\"

常量

与变量定义方法相似

const name type

不过常量可用于枚举

const(cpp=0java=1python=2golang=3)fmt.Println(cpp,java,python,golang)

输出结果为

0 1 2 3

iota,特殊常量,可用于自增。

const(cpp =iotajavapythongolang)fmt.Println(cpp,java,python,golang)

还是得到一样的结果

0 1 2 3

第一个iota等于0,再新一行使用它就会自加1

const(b = 1<<(10*iota)kbmbgbtbpb)fmt.Println(b,kb,mb,gb,tb,pb)

得到输出为

1 1024 1048576 1073741824 1099511627776 1125899906842624

**<<**表示左移的意思(二进制),b等于1,第一次左移十位,就是变成10000000000,化成十进制也就是1024,以此类推后面都是这样。

条件

if 语句(由一个布尔表达式后紧跟一个或多个语句组成)

const filename=\"abc.txt\"content,err:=ioutil.ReadFile(filename)if err!=nil{fmt.Println(err)}else{fmt.Printf(\"%s\\n\",content)}

在这个程序中,新建了一个名为abc的文本文件,它里面的内容如下

并使用到ioutil.ReadFile用于读取函数,它一共会返回两个值,一共是文本内容,还有一个是出错内容。使用 if语句,当函数的出错内容不为nil(空)时打印出错内容,否则打印真实内容。
输出为

Hello Goabc123

switch语句(用于基于不同条件执行不同动作)

func grade(score int) string {g:=\"\"switch{case score<0 ||score>100:panic(fmt.Sprintf(\"Wrong Score %d\",score))case score<60:g=\"F\"case score<80:g=\"C\"case score<90:g=\"B\"case score<=100:g=\"A\"}return g}func main() {fmt.Println(grade(59),grade(60),grade(72),grade(88),grade(100),grade(-3))}

定义一个函数用于去判断成绩的等级,首先定义一共g(空串)去接受定义的等级值。再定义一个switch,首先第一个case条件设置为如果是小于0或者大于100值不成立,随后再定义各个等级的分值范围,最后返回等级。
再用到main函数去调用这个函数。
switch不用每个case都break

循环

先定义一个累加的简单循环。语法与C语言相似 for 初始值;条件;循环变量增值。

i:=0sum:=0for i=0;i<=10;i++{sum+=i}fmt.Println(sum)

这里我们用一个十进制转换二进制的函数来体现一下,go语言的for语句可以不用初始值。

func convertToBin(n int) string{result :=\" \"for ;n>0;n/=2{lsb := n%2result=strconv.Itoa(lsb)+result}return result

首先还是定义一个空串用于接受值,求二进制相当于,每次对一个数对2求余数模,再整除2,直到哪个数为0时。
用一个13举例,13对2求余为1,转化为字符型加再空串上,13再整除2,等于6,第二个循环,6对2求余为0,再加到result上,注意是加到左边,因为最后结果是取余倒着取

函数

func name([parameter list]) [return type]
这里定义一个简单的算术函数。传入a(int),b(int),op(string),传出类型是int

func cal(a int,b int,op string) int{switch op {case \"+\":return a+bcase \"-\":return a-bcase \"*\":return a*bcase \"/\":return a/bdefault:panic(\"unsupported operation\" +op)}func main() {fmt.Println(cal(3,4,\"+\"))}

最后再mian函数中调用,得到结果

7

然而函数还可以有两个返回值。

func div(a,b int) (q,r int){return a/b,a%b}func main() {fmt.Println(div(12,5))

分别传入一个12,一个5,对其进行除和取余操作。得到结果

2 2

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Go基础语法