分享
  1. 首页
  2. 文章

go语言学习小结(一)

droidwolf · · 3279 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

学习go。记录下
1),package、import
这两个功能在现在的很多语言(java、C#)都具备了。这里面引入包在C家族确实是个很好的东西,使得代码组织更清晰;import而不是include头文件,完全剔除了c家族的弊病。

2),变量命名风格的改变
定义变量:
var i int跟C家族语法 int i; 相去甚远,貌似更接近delphi、javascript、scala风格。当然在语法分析中这样定义变量比C风格的定义是更容易识别的。

类型推导:
类型推导在很多函数语言(scala、f#等)是必须滴,当然C#为了推出lambda表达式也实现了这个功能,不过java现在还没有。需要注意的是go中类型推导只能用在函数里面。来看v ar i int=11的等价写法 i := 11

同时给多个变量赋值:
lua可以给多个变量赋值的,go也有而且语法几乎一样滴 a,b,c := 1,2,3 ,如果写成 a,_:=1,2 那么2就自动丢掉。
有了这个功能交换变量一句话就搞定了 a,b =b,a

定义多个变量:
如果是定义相同类型的变量可以这样 var i,j int 跟C差不多 int i,j;
如果是多个不同类型的变量那是这样
var (
i int
s string
)

定义数组:
定义数组跟定义变量稍微变一变 var array [8]int
还可以这样写
array :=[...]int{0,1,2,3,4,5,6,7}
获取数组长度 len(
arra y ),而不是C家族的array.length

3),go内置数据类型

slices:
上面定义的数组大小是无法改变的。如果要动态的那就要这样
array :=make([]int,8) 或者这样是
var array []int
array =make([]int,8)

[n:m]访问符
[n:m]同样也适用于数组的。用array[n:m](n、m是数组下标)将返回一个从n到m-1的slices。
如果写成[n:]则等价于[n:len(array)]
array :=[...]int{0,1,2,3,4,5,6,7}
array2 :=array[2:4] //返回{2,3}

cap函数
cap 用于获取数组的容量。

append函数
在一个slices或数组后追加元素,产生一个新slices。
array := [...]int{0,1,2,3,4,5,6,7}
array1 :=
array=append(array,8,9,10);// 添加的数据(8、9、10)是一个可变参数

copy函数
n = copy(des ,src)。n等于拷贝元素个数。
array := [...]int{0,1,2,3,4,5,6,7}
array1 :=
make( []int,5)
copy(array1,array[0:5])

map :
go中内置了map数据结构。定义一个map是这样的 var m map[ kType ] vTy pe vType是map关键字存储的值的类型, k T ype是关键字的数据类型。map的创建也是需要用make函数来创建的 m=make(map[ i nt ] stri ng ) ,这里创建关键字类型为int, 类型为string的map。如果map的值是知道的,那么可以用这样
m:=map[int]String{
1:"A",
2:"B",
3:"C",
...
}
注意map里每个元素逗号后一定要换行。
map增加元素 m[4]="d" ;
map去 除元素 delete(m,4)
map 判断存在 val,exists :=m[4]

很多人对go在语言层面内置slices和map持欢呼的态度,go为了内置slices (map) 还添加关键字(go号称很吝啬关键字滴)。lua、python等语言都内置了很有特色的数据类型,go走的是一条方向(ruby、python的开发人员爽了吧)。也许真如go的开发者说的slices(map)是轻量快速的。

4),控制语句
go里控制语句精简了(去除了while、do)不少而更灵活了。
A),if语句。if在条件表达式内不用加圆括号,但强制加大括号。变化点if的条件表达可以有初始化语句
if a:=1; a==0{}
B),for语句
for 表达式; 条件; 表达式{} 典型的C家族for
for 条件{} C家族 while的替代
for{} 死循环
for和关键字range结合遍历数组、slices、map。类似于js的for in、java 的for(val : list.values())、C#的foreach.
for key,value range array{}
C),switch。明显的差别是go的switch case里不用谢braek。
C1,case可以有条件表达式
a:=1
swich{
case a>0&& a<10:
//dosomething
default:
//dosomething
}
C2,case 连续匹配
swich a{
case 1,2,3:
//dosomething
default:
//dosomething
}
C2, fallthrough.新关键字fallthrough让当前case匹配到下一个case里。。
swich a{
case 1: fallth rough
case 2: fallth rough
case 3: fallth rough
//dosomething
default:
//dosomething
}
C3,go的switch也有if语句一样的 初始化语句
swich a:=1;a{}

有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:droidwolf

查看原文:go语言学习小结(一)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3279 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏