博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在golang编程中总结的基础语法及常见的问题
阅读量:5767 次
发布时间:2019-06-18

本文共 2809 字,大约阅读时间需要 9 分钟。

写下,自己在用golang开发中,用到的东西,有啥写啥。

今个就写下golang中的控制语句  if  else、for、switch、goto,这几个方面。

if 判断对比

1
2
3
4
5
6
7
8
9
10
11
package 
main
import 
"fmt"
func main(){
    
fmt.Printf(
"hello world\n"
)
    
if 
a:=
5
;a>
2 
{
        
fmt.Printf(
"a >2"
)
    
}
else
    
{
        
fmt.Printf(
"a<2"
)
    
}
}

for 循环

这里可以直接赋值

1
2
3
for 
i, j := 
1
10
; i < j; i,j=i+
1
,j+
1 
{  
//死循环
    
fmt.Println(i)
}

完整的例子


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package 
main
import 
"fmt"
func main(){
    
fmt.Printf(
"hello world\n"
)
    
if 
a:=
5
;a>
2 
{
        
fmt.Printf(
"a >2"
)
    
}
else
    
{
        
fmt.Printf(
"a<2"
)
    
}
    
stra:=
"111"
    
for 
i:=
0
; i< len(stra); i++ {
        
fmt.Println(i)
    
}
}

如果想实现死循环,很简单,直接

1
2
3
for
{
    
go rui()
    
}

这里在看看switch的用法,学过语言的人都知道的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package 
main
import 
"fmt"
func main(){
    
fmt.Printf(
"hello world\n"
)
    
if 
a:=
5
;a>
2 
{
        
fmt.Printf(
"a >2"
)
    
else
    
{
        
fmt.Printf(
"a<2"
)
    
}
    
stra:=
"111"
    
for 
i:=
0
; i< len(stra); i++ {
        
fmt.Println(i)
    
}
//这里是switch
    
ch:=
"unix"
    
var 
cl string
    
switch 
ch {
    
case 
"mac"
:
        
cl = 
"mac"
    
case 
"linux"
:
        
cl = 
"linux"
    
case 
"unix"
:
        
cl= 
"unix"
    
}
    
fmt.Println(cl)
}

对于判断是可以写更复杂的

用if实现:

1
2
3
4
5
kk := 
0
bb := 
9
if 
0 
<= kk && bb <= 
9 
{
    
fmt.Println(
"zhenghao"
)
}

用switch实现

1
2
3
4
5
6
7
8
9
    
oo := 
11
    
switch 
{
    
case 
0
<
3 
&& oo <= 
9
:
        
fmt.Println(
"and"
)
    
case 
(
1 
<= 
0  
&& 
2 
<= 
2
) || (
'A' 
<= 
'A' 
&& 
'Z' 
<= 
'Z'
):
        
fmt.Println(
"fei"
)
    
default
:
        
cl = 
"Other Char"
}

还有一个goto,是个在自定义标签中跳转用的

1
2
3
4
5
6
7
func good(){
            
i := 
0
        
xiaorui:                
//同其它语言也是以冒号结束作为标签
            
println(i)
            
i++
            
goto xiaorui    
//跳转到xiaorui去
        
}

数组其实用的不多,这里就一笔带过,貌似更多的人在用切片slices  

1
2
3
4
5
6
var 
a [
5
]
int
    
fmt.Println(
"emp:"
, a)
    
a[
4
] = 
100
    
fmt.Println(
"set:"
, a)
    
fmt.Println(
"get:"
, a[
4
])
    
fmt.Println(
"len:"
, len(a))

slice是一个指针而不是值。

slice就是“动态的数组”,传值的时候他也是拷贝赋值,只是他拷贝的是内存地址,是传递指针的。slice总是指向一个底层的array,slice声明也像array一样,只是不需要长度。

切片中有两个概念:一是len长度,二是cap容量,长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得。切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。


1
2
3
4
5
6
7
8
9
10
11
12
a := []
int
{
1
2
3
4
5
}
s1 := a[
2
:
5
]
s2 := a[
1
:
3
]
fmt.Println(s1, s2)
s2 = append(s2, 
1
2
2
3
3
4
5
)
s1[
0
] = 
9
fmt.Println(s1, s2)
s2 = append(s2,
11
,
22
,
33
)
fmt.Println(s2)
aa := []string{
"aa"
,
"bb"
,
"xiaorui.cc"
}
aa = append(aa,
"this is rfyiamcool.blog.51cto.com"
)
fmt.Println(aa)

map结构也经常常用,它和python中的dict 几乎一模一样,是一个key-value的hash结构。key可以是除了func类型,array,slice,map类型之外的类型。

它的使用也是非常简单

m:=map[string]string{}

m["key1"] = "val1"

map结构和slice是一样的,是一个指针。赋值的时候是将指针复制给新的变量

map的增删改查操作是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package 
main
import
(
    
"fmt"
)
func main() {
    
m := map[string]string{
"key1"
:
"val1"
}
    
fmt.Println(m)
    
m[
"key2"
] = 
"val2"
    
fmt.Println(m)
    
p := m[
"key1"
]
    
fmt.Println(p)
    
delete
(m, 
"key1"
)
    
fmt.Println(m)
}

今天就这样了,有时间再写

 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1381919,如需转载请自行联系原作者
你可能感兴趣的文章
php调用接口及编写接口
查看>>
Oracle11g_自动内存管理
查看>>
AIX 磁盘限额的配置
查看>>
往数据库插入一个数据
查看>>
Installing CentOS 6 or RedHat EL 6 on a partition larger than 2.2T
查看>>
【Python】基于fabric模块批量远程主机操作
查看>>
查看nginx,apache,mysql,php编译参数
查看>>
VMware+双网卡设置
查看>>
监控io性能、free命令、ps命令、查看网络状态、Linux下抓包
查看>>
Apache CXF实现的SOAP形式的webservices
查看>>
网页资源下载 -- 水浒传全集
查看>>
VMware虚拟服务器磁盘扩容
查看>>
用Webmin轻松管理linux服务!
查看>>
磁盘和文件系统管理(一)
查看>>
详述UltraISO(软碟通)刻录Windows系统光盘的那些事
查看>>
Windows 2012新功能
查看>>
rsync只同步指定的文件类型排除所有
查看>>
我的友情链接
查看>>
Linux shutdown和Init的命令区别,以及计算带宽
查看>>
USB之基本协议和数据波形1
查看>>