上一篇已经说了,Go的语法和C的很接近,直接看看异同即可。

变量

变量名还是一样,字母或下划线开头,区分大小写。不能是关键字。

Go定义了int32和int64这种类型来显示声明大小,和C里面的short和long一样。

Go的变量定义有以下几种方式:

var v1 int //类型在后面

var v3 , v4 int //多个变量

var v5 = 10 //初始化
v5 := 10 //初始化 //下面这种算重复定义
var v6 int
v6 := 10 //err

Go比较厉害的是支持多个返回值了,所以:

var v2, v3, v4 int
v2, v3, v4 = 1, 2, 3 //多重赋值 i := 10
j := 20
i, j = j, i //交换变量

Go还支持匿名变量,表示抛弃:

_, i, _, j := 1, 2, 3, 4 //i=2 j=4

常量

常量用const。

const Pi float64 = 3.14
const zero = 0.0 // 浮点常量, 自动推导类型 const ( // 常量组
size int64 = 1024
eof = -1 // 整型常量, 自动推导类型
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo" //err, 常量不能修改

常量枚举

const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)//0 1 2 ha ha 100 100 7 8

类型

类型和C差不多,但是不支持隐式转换了,都需要显示转换,而且转换只能发生在两种相互兼容的类型之间。比如:

//布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换
var b bool
b = 1 // err, 编译错误
b = bool(1) // err, 编译错误

bool转int

func bool2int(b bool) int {
if b {
return 1
}
return 0
}

int转bool

func int2bool(i int) bool {
return i != 0
}

字符和字符串

byte就是char,也就是int8,存的还是ASCII码。

字符串string,双引号,末尾还是有个‘\0’。

字符串之间可以用加号拼接。

格式化输入输出

格式和C一样,只是包换成了fmt

//整型
a := 15
fmt.Printf("a = %b\n", a) //a = 1111
fmt.Printf("%%\n") //只输出一个% //字符
ch := 'a'
fmt.Printf("ch = %c, %c\n", ch, 97) //a, a

输入:

var v int
fmt.Println("请输入一个整型:")
fmt.Scanf("%d", &v)
//fmt.Scan(&v)
fmt.Println("v = ", v)

运算符

运算符和C里面没有什么区别。

流程控制

  • if - else 条件语句
  • switch - case 选择语句
  • for - range 循环语句
  • goto 无条件跳转语句
  • defer 延迟执行

有变化的:

  • case默认带break
  • range可以用来遍历string/array/slice/map,第一个返回值是元素的数组下标,第二个返回值是元素的值。
s := "abc"
for i := range s { //支持 string/array/slice/map。
fmt.Printf("%c\n", s[i])
} for _, c := range s { // 忽略 index
fmt.Printf("%c\n", c)
} for i, c := range s {
fmt.Printf("%d, %c\n", i, c)
}
  • goto语句和标签之间不能有变量定义

defer单独开一篇讲吧。

最新文章

  1. Python json.dumps 特殊数据类型的自定义序列化操作
  2. 从头开始构建LINUX[内核更新和资料]
  3. 基于nutz框架理解Ioc容器
  4. java播放背景音乐的几种方式
  5. mysql存储过程对900w数据进行操作测试
  6. CodeSnippetsLibrary的使用方法
  7. jsp笔记
  8. 堆的 两种实现 (数组和STL)
  9. 你可能不知道的SQL问题
  10. html input type="button" 页面跳转
  11. nodejs端口被占用。
  12. 爬 NationalData ,虽然可以直接下,但还是爬一下吧
  13. Linux下 开启防火墙端口
  14. 实现ssr服务端渲染
  15. workqueue --最清晰的讲解【转】
  16. 如何解决 React 官方脚手架不支持 Less 的问题
  17. [HDU4635] Strongly connected
  18. 无责任共享 Coursera、Udacity 等课程视频(转载)
  19. Ext create动态加载分析
  20. python的数字图像处理学习(1)

热门文章

  1. css3 flex的IE8浏览器兼容问题
  2. Mybatis中使用级联查询,一对多的查询
  3. linux中创建公私钥
  4. 『Python』matplotlib初识
  5. [转载]ssh证书登录
  6. 定要过python二级选择题第一套
  7. 提权AND反弹OR转发
  8. Java网络爬虫技术《一》 HttpClient
  9. 前端从web服务器或者CDN下载资源
  10. Postman快速入门