好奇,Go 系统包是怎么实现,想起来以前没看完的书,名字叫:《UNIX环境高级编程》,号称 APUE,是不是有 Go 版本的,有意思,可以自己实现
8.17 反引号括起来是什么意思,而且 flag.Var 的第一个参数应该是取地址的引用,这个 newSliceValue 是返回的是一个 sliceValue 指针,有啥意义,类型相同换个名字,最终只为了放在 languages 变量里,那为什么不直接 flag.Var(&languages, "slice"...) 因为类型么
//定义一个类型,用于增加该类型方法
type sliceValue []string
//new一个存放命令行参数值的slice
func newSliceValue(vals []string, p *[]string) *sliceValue {
*p = vals
return (*sliceValue)(p)
}
...省略
func main(){
var languages []string
flag.Var(newSliceValue([]string{}, &languages), "slice", "I like programming `languages`")
flag.Parse()
//打印结果slice接收到的值
fmt.Println(languages)
}
多线程程序在单核心的 cpu 上运行,称为并发;多线程程序在多核心的 cpu 上运行,称为并行。
并发与并行并不相同,并发主要由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,Go程序可以设置使用核心数,以发挥多核计算机的能力。
runtime 运行时 什么是 runtime 在计算机领域中,经常会接触到 runtime 这个概念,那么 runtime 究竟是什么东西?
runtime 描述了程序运行时候执行的软件/指令, 在每种语言有着不同的实现。可大可小,在 C 中,runtime 是库代码, 等同于 C runtime library,一系列 C 程序运行所需的函数,在 Java 中,runtime 还提供了 Java 程序运行所需的虚拟机等。
总而言之,runtime 是一个通用抽象的术语,指的是计算机程序运行的时候所需要的一切代码库,框架,平台等。
Go中的 runtime 在 Go 中, 有一个 runtime 库,其实现了垃圾回收,并发控制, 栈管理以及其他一些 Go 语言的关键特性。 runtime 库是每个 Go 程序的一部分,也就是说编译 Go 代码为机器代码时也会将其也编译进来。所以 Go 官方将其定位偏向类似于 C 语言中的库。Go 中的 runtime 不像 Java runtime (JRE, java runtime envirement ) 一样,jre 还会提供虚拟机, Java 程序要在 JRE 下 才能运行。
所以在 Go 语言中, runtime 只是提供支持语言特性的库的名称,也就是 Go 程序执行时候使用的库。
ref
// 这个用法与 map 中的按键获取 value 的过程比较类似,只需要看第二个 bool 返回值即可,如果返回值是 false 则表示 ch 已经被关闭。
x, ok := <-ch
© 2016-2021 taluo.ren 版权所有 ICP证:蜀ICP备15023822号-2