C++程序员学习go基础语法
来源:互联网 发布:ico图标制作软件 编辑:程序博客网 时间:2024/04/28 09:24
概念差异:
1.Go没有继承和虚函数,但是提供接口interface。
2.Go有指针,但是没有指针算术。
3.Go提供垃圾回收。不需要delete
4.Go的字符串类似C++的const char*。无法被修改。
5.Go少数类型是引用传递。
6.Go的对外可见是以大小写定义头字母的来识别的。C++中是Public,private。
7.Go禁止隐式类型转换。
8.Go不支持函数重载和运算符重定义。
9.Go使用nil表示无效指针。
10.左大括号{必须在当前行。
11.局部变量通过&返回是有效的,和C++不一样!即return new(Data) 等价于return &Data{}
0.命名规范以及缩进
1.行末没必要有分号 ; 。
2.对外变量或函数首字母大写。
3.命名规范我本人参考的http://studygolang.com/articles/2059
1.变量
1.基础类型
var a int8 = 3
var a int16 = 3
var a int32 = 3
var a int64 = 3
var a uint8 = 3
var a uint16 = 3
var a uint32 = 3
var a uint64 = 3
var a float32 = 3
var a float64 = 3
var a int64 = 3
var a int8 = 3
var a int16 = 3
var a int32 = 3
var a int64 = 3
var a string = "asd"
var a byte = 'v'
2.枚举
const(
_ = iota
a //1
b //2
)
3.type
type str string
2.控制语句
1.ifif youcode {
}
2.for
for i:=1; i < x; i++{
//不支持前置++
}
for{} //无限循环
3.switch
var int32 a = 3
switch {
case 1 == a:
case 3 != a:
default:
}
没必要break,会直接返回。
3.函数
1.带参数和返回值
func(inputdata int32)(outputdata int32){
}
2.无返回值
func(inputdata int32){
}
3.变参
func(inputdata ...int32)(outputdata ...int32){
}
4.defer
defer 后的语句会在函数执行之前执行。
4.结构
1.type A struct {}
有点类似C++的用法。
2.函数实现
func(p *A){
}
5.接口
1.interface
只要实现了接口里面的所有函数,就是实现了接口,没有必要类似C++来继承。
6.包管理
1.import(
)
这个很好理解,类似C++。但是要遵循Go的文件结构。
package 名字和import里面的名字必须一致。
2. 循环依赖问题
Go是不支持循环依赖的。但是我们可以将模块向外暴露的成员用接口封装起来。使两个类间的依赖变成对对方接口的依赖。从而避开了包的循环依赖。
7.数组
0.先说分配
有两种方法:
new(T):申请空间并返回一个T*值。
make(T,args):只生成切片,映射,信道,返回一个T值。
1.array
array := [...]int32{1,2,3,4,5}
GO的数组为值,如果想用的,建议用*来传递。
GO的数组和JAVA类似,自带长度,不需要额外的数值来保存。
2.slice
切片封装数组,相当于传递一个数组的指针。
3.map
类似STL的map,但是数组和切片不可以用作key,因为其类型未定义。
map是引用类型。
map[type] type{}
8.异常
1.Go使用异常机制,需要三个关键字 defer recover panic
例子如下:
func exception() {
defer func() {
fmt.Println("defer")
if err := recover(); err != nil {
fmt.Println(err)
}
}()
panic(100)
}
func main() {
exception()
}
捕获异常之后,函数会直接在defer里面返回
9.并发
1.go程
可以理解为协程。某些时候可以当作线程来用,但是比线程要方便并且易于理解。
go func() 就可以直接运行
2.channels(信道)
var c = make(chan int)
var c = make(chan int, 10)//缓冲信道
一般可用于两个go程之间通信
3.mutex
加锁,和一般的加锁没有什么区别。
4.once
once.Do(func) 保证这个函数只在第一次调用,一种花式的全局静态的感觉。
10.init函数
1.每个源文件可以定义自身的init()函数来安排一些动作。在初始化完成后执行。发生在包里的所有变量初始化之后,发生在所有的包导入之后。
11.库API链接
1.http://studygolang.com/static/pkgdoc/index.html
最后附上:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
- C++程序员学习go基础语法
- 黑马程序员-c语言学习-基础语法
- Go语言基础语法学习笔记[1]
- Go语言基础语法学习笔记[2]
- Go语言基础语法学习笔记[3]
- Go语言学习笔记(二)-基础语法
- 黑马程序员-C语言学习日记(一)基础语法
- 黑马程序员-ios学习笔记 C语言基础语法
- 黑马程序员-----------C语言基础-----------基础语法
- GO!---基础语法
- Go 语言基础语法
- Go基础语法整理
- 练习go基础语法
- Go语言基础语法
- 黑马程序员------C语言基础语法
- 黑马程序员 -- IOS C语言 基础语法
- 黑马程序员--- c语言基础--基本语法
- 黑马程序员----C语言基础语法篇
- SpringMVC接收页面表单参数
- React Native 之 Using a ListView
- vb中函数的调用与参数的传递
- ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用
- Stones on the Table
- C++程序员学习go基础语法
- Unity3D自学笔记——UGUI背包系统(一)ItemData
- Dagger2-渐入二(提升)
- win10里面f1到f12的快捷键为什么用不了?——纪念初学电脑和编程的傻逼
- 【龙印】龙芯1c上双路16位AD芯片TM7705的linux驱动
- mysql的group by用法在5.7和5.6中存在区别
- 遍历文件夹目录
- c++ time.h clock()程序计时
- 深度模型一些新的运行框架或者辅助库工具等