Data structure stack:
Heap: The heap can be regarded as a tree, such as: heap sort. In the queue, the scheduler repeatedly extracts the first job in the queue and runs it, because in reality some short tasks will wait for a long time to end, or some jobs that are not short but important are also should have priority.
Heap is a data structure designed to solve such problems. (Recommended learning: Go )
stack: A advanced data structure.
Stack caching method
The stack uses a first-level cache. They are usually in the storage space when they are called, and are released immediately after the call is completed.
The heap is stored in the second-level cache, and the life cycle is determined by the garbage collection algorithm of the virtual machine (not that it can be recycled once it becomes an orphan object). Therefore, the speed of calling these objects is relatively low.
Stack Trace
The following discusses stack trace information and how to identify the parameters passed to a function on the stack.
The version of the following test case is Go 1.11
Example:
package main import "runtime/debug" func main() { slice := make([]string, 2, 4) Example(slice, "hello", 10) } func Example(slice []string, str string, i int) { debug.PrintStack() }
Listing 1 is a simple program, the main function calls the Example function on line 5. The Example function is declared on line 9. It has three parameters, a string slice, a string and an integer. Its method body is also very simple, with only one line, debug.PrintStack(), which will immediately generate a stack trace information:
goroutine 1 [running]: runtime/debug.Stack(0x1, 0x0, 0x0) C:/Go/src/runtime/debug/stack.go:24 +0xae runtime/debug.PrintStack() C:/Go/src/runtime/debug/stack.go:16 +0x29 main.Example(0xc000077f48, 0x2, 0x4, 0x4abd9e, 0x5, 0xa) D:/gopath/src/example/example/main.go:10 +0x27 main.main() D:/gopath/src/example/example/main.go:7 +0x79
Stack trace information:
One line shows that the running goroutine is the goroutine with id 1.
The second line debug.Stack() is called
The fourth line debug.PrintStack() is called
The sixth line calls debug.PrintStack() code location , the Example function located under the main package. It also shows the file and path where the code is located, and the line number where debug.PrintStack() occurs (line 10).
The eighth line also calls the name of the function Example, which is the main function of the main package. It also shows the file name and path, and the line number where the Example function was called.
The above is the detailed content of How to view golang's stack. For more information, please follow other related articles on the PHP Chinese website!