1. 在 A 和 B 处填入代码,使输出为 foo
| **package **main
**type **S **struct
**{
m string
}
*func **f()\S {
**return **_\ _//A
_}
**func **main() {
p:=_\ _//B
_print(p.m)
} |
---|
1 | package main |
2. 下面代码输出是什么,若想输出 012,怎么改
| **package **main
const _N _= 3
**func **main() {
m := make(map[int]*int)
for **i :=
0; i < **N;
i++ {
m[i] = &i
}
**for **_, v
:= **range **m {
print(*v)
}
} |
---|
1 | package main |
3. 代码输出什么?为什么?如何改会使得 len(m)为 10
| **package **main
**import “sync”
const _N _**= 10
**func **main() {
m := make(map[int]int)
wg := &sync.WaitGroup{}
mu := &sync.Mutex{}
wg.Add(N)
for **i :=
0; i < **N;
i++ {
go func() {
**defer **wg.Done()
mu.Lock()
m[i] = i
mu.Unlock()
}()
}
wg.Wait()
println(len(m))
} |
---|
1 | package main |
4. 请描述 golang 语言的初始化顺序:包,变量,常量,init 函数
main 包->import 包->常量->变量->init 函数
5. 描述下面代码输出
1 | package main |
6. 下面代码有什么问题,怎么修改
| **package **main
**import **(
**“sync”
“math/rand”
**)
const _N _= 10
**func **main() {
m := make(map[int]int)
wg := &sync.WaitGroup{}
wg.Add(N)
for **i :=
0; i < **N;
i++ {
go func() {_
_**defer **wg.Done()
m[rand.Int()] = rand.Int()_
_}()
}
wg.Wait()
println(len(m))
} |
---|
1 | package main |
7. 请描述 make 和 new 的区别
make 被用来分配引用类型的内存: map, slice, channel
new 被用来分配除了引用类型的所有其他类型的内存: int, string, array 等
8. 下面代码输出什么,如何让输出为 true
| **package **main
**import “fmt”
type *S **struct \*{
a, b, c string
}
**func **main() {
x := interface{}(&S{“a”, “b”, “c”})
y := interface{}(&S{“a”, “b”, “c”})
fmt.Println(x == y)
} |
---|
1 | package main |
9. 下面代码问题是什么,如何修改
| **package **main
**type **S **struct
**{
name string
}
func **main() {_
_m := **map[string]S{“x”: S{“one”}}
m[“x”].name = **“two”
**} |
---|
1 | package main |
10. 修改代码,使得 status 输出为 200
| **package **main
**import **(
**“encoding/json”
“fmt”
**)
**type **Result **struct **{
status int_
_}
**func **main() {
var **data
= []byte({"status":200}
**)
result := &Result{}
**if **err
:= json.Unmarshal(data, &result); err != nil {
fmt.Println(“error:”, err)
**return
**}
fmt.Printf(“result=%+v”, result)
} |
---|
1 | package main |
11. 描述 golang 中的 stack 和 heap 的区别,分别在什么情况下会分配 stack?又在何时会分配到 heap 中
区别:
栈:一般存放变量名,比较小,系统自动处理内存分配和释放
堆:一般存放具体数据,比较大,一般程序员处理内存
例如 a:=123 a 在栈,123 在堆