作为有编程基础的人入门基础语法是很容易的但是这次的go真的是有些别扭啊,前后折腾了有半月有余问题关键是有几个地方与已有的语言不同,比如goroutine struct 方法 chan 函数 并发而其余的来说都还容易理解。在个人学习go的过程中其实语法层面不难理解和接受,这半个多月有大概1/3的时间用于理解goroutine 线程锁 多线程访问 资源同步 ? channel。为什么呢?go是以高并发著称,而并发带来的问题如何互斥资源共享避免死锁,对于语法来说大家很快就能入门而线程?预防死锁和多线程通信资源共享是提升自我的关键和一门技术的核心……
然后就是又遇见了runtime这个狗屁,这个是很多静态语言具备的黑魔法。作为iOS开发我想大家对于这个再熟悉不过啦。可以从更深层次的去理解和压榨语言的性能……
好了我们来体验一下go
1 hello,word
2 变量声明
3 常见数据类型
4 写个函数
语言入门hello,world必不可少
package main
import "fmt"
func main() {
fmt.Println("Hello,WOrld")
}
从上面我们提取到有效信息如下:package import main func这个几个关键信息
1 pakcage是作为包名
2 import导入依赖包
3 func声明一个函数(为啥function叫做函数而不叫方法呢?后续自会明了)
变量声明
对于go这类高级语言声明变量变得异常简单,我们来看看常规的方式
var name = "Jack"
var age = 30
除此之外还有简易的方式
name , age,addr := "Jack",30,"CN"
也许你对这种方式感觉不自在但是这就是语法,其实最关键是还是因为有了强大的类型推导能力才使得各种语法糖变得异常强大,也是各种代码更加适合人们书写与阅读---例如上面的粒子我们很容的就定义书写出简易代表一个人信息的语句
基础数据类型
var a = int(2)
var b = float64(23)
var c = "Hello, World"
fmt.Println(a, b, c)
//array
var d = []int{1, 2, 3,}
//slice
var dd = d[1:]
var ddd = d[1:2]
for index, value := range d {
fmt.Print("index:", index, "value:", value)
函数预览
……
operation(12, 3, add)
operation(12, 3, sub)
}
func sub(a int, b int) int {
return a - b
}
func add(a int, b int) int {
return a + b
}
func operation(a int, b int, category func(a int, b int) int) (result int) {
result = category(a, b)
return result
}
在现代话的编程语言中func同样是数据类型,可以作为参数传递,通过上面的粒子我们看到,对于一个函数我们可以使用不同的函数作为参数来获取不同的数据操作结果(俗称策略)