说一些非常简单的Golang代码:
package main
import "fmt"
func plus( a int, b int) int {
return a+b
}
func plusPlus(a,b,c int) int {
return a +b + c
}
func main() {
ptr := plus
ptr2 := plusPlus
fmt.Println(ptr)
fmt.Println(ptr2)
}
Run Code Online (Sandbox Code Playgroud)
这有以下输出:
0x2000
0x2020
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?这看起来不像是一个函数指针,或任何类型的指针,可以在堆栈中找到.我也理解Go,虽然在线程部门提供了一些不错的低级功能,但也需要一个操作系统才能运行; C可以在所有计算机平台上运行,操作系统可以写入其中,而Go需要操作系统才能运行,实际上现在只能在少数操作系统上运行.常规函数指针是否意味着它可以在VM上运行?或者编译器是否只链接到低级C函数?
对于以下代码:
func main() {
goRtns := runtime.NumGoroutine()
fmt.Println("goroutines:", goRtns)
}
Run Code Online (Sandbox Code Playgroud)
输出为1。但这是在“过程”中,没有goroutines被明确调用:
“在计算中,进程是正在执行的计算机程序的实例。它包含程序代码及其当前活动。根据操作系统(OS),进程可能由多个执行线程组成,这些线程执行指令同时进行。”
同样来自克里希纳·桑达拉姆(Krishna Sundarram)出色的“ goroutines如何工作”博客文章:http : //blog.nindalf.com/how-goroutines-work/
“创建goroutine不需要太多的内存,仅需要2kB的堆栈空间。它们可以通过根据需要分配和释放堆存储来增长。”
那么我的问题是:运行时库将正在运行的代码实例(我简单的main.go函数)计为goroutine。我是否假定父进程被视为go例程,并且具有相同的内存分配,垃圾回收等规则?假设读取有关goroutine执行的事实与运行它的总体go进程类似,是否明智?关于上面关于goroutine的第二个引号,这听起来像是一个程序在执行程序时增大/缩小其堆栈空间的过程,这是编程的标准范例。
go流程和例程是否共享相同的规则?还是我只是缺少有关报告的goroutine数量的信息。
我正在将JSON对象写入从twitter api流式传输的文件中.它们正确登录到控制台,看起来像JSON对象; 但是,当我使用命令时:
fs.appendFile("./tweets.json", tweet)
Run Code Online (Sandbox Code Playgroud)
写入文件的所有内容如下:
[object Object]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?当我将对象tweet写入控制台时,这是输出:
{ created_at: 'Tue Mar 17 22:12:41 +0000 2015',
id: 577955743997018100,
id_str: '577955743997018112',
text:
......tons more stuff....
filter_level: 'low',
lang: 'en',
timestamp_ms: '1426639434951' }
Run Code Online (Sandbox Code Playgroud)
什么是[object Object],为什么写这个?