Go基础语法

GO

简介

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

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

基础语法

Hello World

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

package main

func main(){

}

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

package main

import "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 int
var s string
fmt.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=0
		java=1
		python=2
		golang=3
	)
	fmt.Println(cpp,java,python,golang)

输出结果为0 1 2 3
iota,特殊常量,可用于自增。

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

还是得到一样的结果0 1 2 3
第一个iota等于0,再新一行使用它就会自加1

const(
		b = 1<<(10*iota)
		kb
		mb
		gb
		tb
		pb
	)
	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 Go
abc
123

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:=0
sum:=0
for 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%2
		result=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+b
	case "-":
		return a-b
	case "*":
		return a*b
	case "/":
		return a/b
	default:
		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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值