当前位置:网站首页>golang之笔试题&面试题01
golang之笔试题&面试题01
2022-04-23 11:26:00 【runscript.sh】
就是几个简单的笔试题目,也可能面试的时候直接给看让说结果。
1, 用不同的goroutine去操作map的时候会存在线程同步的问题,把map换成int ,这个问题同样存在。在go里是这样。
2,下面这段代码输出的值为:
func t(){
jsonStr:=[]byte(`{"age":1}`)
var value map[string]interface{
}
json.Unmarshal(jsonStr,&value)
age:=value["age"]
fmt.Println(reflect.TypeOf(age))
//float64
}
区别:
func t() {
jsonStr := []byte(`{"age":1}`)
var value map[string]int
json.Unmarshal(jsonStr, &value)
age := value["age"]
fmt.Println(reflect.TypeOf(age))
//int
}
3,下边代码是否有问题,问题在哪里
import (
"sync"
"fmt"
)
type UserAges struct {
ages map[string] int
sync.Mutex
}
func (u *UserAges)Add(name string,age int) {
u.Lock()
defer u.Unlock()
u.ages[name] = age
}
func (u *UserAges)Get(name string)int{
if age,ok:=u.ages[name];ok{
return age
}
return -1
}
问题在于,ages没有暴露背外部的包,导致调用者无法初始化ages。
然后在调用add函数时,就会报错。考察函数的作用域问题。
4,下边代码的输出结果是什么?
func TestArrayAndSlice(){
s1:=[]int{
1,2,3}
s2:=s1[1:]
for i:=range s2{
s2[i]+=10
}
fmt.Println(s2)
s2=append(s2, 4)
for i:=range s2{
s2[i]+=10
}
fmt.Println(s2)
}
输出结果如下:这个是在考察数组和切片用s2截取s1的下边为1及之后;而后执行操作。
[12 13]
[22 23 14]
5,下边代码输出什么
func TestDoit(){
doit:= func(arg int) interface{
}{
var result *struct{
}=nil
if (arg>0) {
result = &struct{
}{
}
}
return result
}
//输出结果。
//-1:result: <nil> 为空的匿名结构体
//1://result: &{} 匿名结构体的地址
if res:=doit(1);res!=nil{
fmt.Println("result:",res)
}
}
output:
result: &{
}
6,下边代码的输出结果是什么
//放在main里边
//指定只能用一个逻辑处理器,方便看调度顺序。
func t2(){
runtime.GOMAXPROCS(1)
wg:=sync.WaitGroup{
}
wg.Add(20)
//step 1
for i:=0;i<10 ;i++ {
go func() {
fmt.Println("i",i)
wg.Done()
}()
}
fmt.Println("--------------------")
//step 2
for j:=0;j<10 ;j++ {
go func(j int) {
fmt.Println("j",j)
wg.Done()
}(j)
}
wg.Wait()
}
output:
--------------------
j 9
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
j 0
j 1
j 2
j 3
j 4
j 5
j 6
j 7
j 8
这个要注意,第一个for里没有传参数,第二个传参数了。
所以第一个for里启动的goroutine用的i其实是主线程里的i;
之所以都是10,(也有可能前面几个<10);是因为调用i的时候,i在主线程内已经加到10了。
而第二个for里的i是通过参数传递,所以会打印0~9;
版权声明
本文为[runscript.sh]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zhangh571354026/article/details/124359368
边栏推荐
- How to quickly query 10 million pieces of data in MySQL
- MySQL数据库事务transaction示例讲解教程
- Mysql排序的特性详情
- Redis optimization series (II) redis master-slave principle and master-slave common configuration
- 分享两个实用的shell脚本
- Understanding of fileprovider path configuration strategy
- rebbitMQ的简单搭建
- Change exchange II - [leetcode]
- 解决 『SunCertPathBuilderException:unable to find valid certification path to requested target』 问题
- Implementation of partition table of existing data table by MySQL
猜你喜欢

nacos基础(9):nacos配置管理之从单体架构到微服务
![Change exchange II - [leetcode]](/img/ad/33b13a004208d613c9a211fec9e5b1.png)
Change exchange II - [leetcode]

Usage of rename in cygwin

Learn go language 0x04: Code of exercises sliced in go language journey

Tensorflow使用keras创建神经网络的方法

Significance of actively participating in middle school robot competition

论坛系统数据库设计

Using Baidu PaddlePaddle EasyDL to accomplish specified target recognition

MQ在laravel中简单使用

2022爱分析· 工业互联网厂商全景报告
随机推荐
分享两个实用的shell脚本
Detailed explanation of how to smoothly go online after MySQL table splitting
Laravel绑定钉钉群警报(php)
解读机器人编程课程的生物认知度
PDMS soft lithography process
解决由于找不到amd_ags_x64.dll,无法继续执行代码。重新安装程序可能会解决此问题,地平线(Forza Horizon 5)
How to quickly query 10 million pieces of data in MySQL
GPU, CUDA,cuDNN三者的关系总结
ImportError: libX11.so.6: cannot open shared object file: No such file or directory
用curl库压缩成发送字符串为utf8并用curl库发送
Detailed explanation of MySQL creation stored procedure and function
How does QT turn qwigdet into qdialog
Overall plan management mode in maker Education
Detailed explanation of integer data type tinyint in MySQL
Applet payment
rebbitMQ的简单搭建
laravel-admin表单验证
Upgrade the functions available for cpolar intranet penetration
Write console script by laravel
Redis optimization series (II) redis master-slave principle and master-slave common configuration