golang和c的代码有很大不同的,一不小心就会误用。
1 /*go保留字:*/
2 /*
3 break default func interface select4 case defer go map struct5 chan else goto package switch6 const fallthrough if range type7 continue for import return var8
9 */
10 /*1 package Name 包的名字*/
11 //package go_reserved
12 package main //No1
13 /*2 import "Name" 导入包14 import (15 别名 "fmt" 一旦启用别名,就不能再使用原名了.16 "..."17 )18 */
19 import ( //No2
20 f "fmt"
21 "io"
22 "os"
23 "strconv"
24 )25 /*3 func 函数定义(形参)(返回列表类型)26 return 函数返回27 func func_name()(X .. Xn's type){28 ...29 ...30 return X .. Xn31 }32 func (p mytype) funcname(q int) (r,s int) { return 0,0 }33 func: 函数保留字34 (p mytype): method,这部分称之为receiver而它是可选的.35 funcname: 函数名36 (q int): 输入参数37 (r,s int): 返回值类型列表38 { return 0,0 }: 函数体39 */
40 func sum(a int, b int)(int){//No3
41 return a+b42 }43 /*4 var 变量定义44 var a int45 var b bool46 var c,d int47 var (48 a int49 b bool50 c, d = 3, 451 )52 c ,d := 3, 453 */
54 func func_var(){55 f.Println("var测试举例:")56 var (//No4
57 a, b = 3, 5
58 c int
59 )60 f.Println("I Love Golang")61 sum :=sum(a,b)62 c=sum63 f.Println("3+5=",c)64 }65 /*5 const 变量名: 只能是数字、字符串或布尔值.66 const x = 367 const (68 a = iota69 b = iota70 c //默认是c=iota71 ...72 )73 */
74 func func_const(){75 f.Println("const生成枚举值举例:")76 const ( //No5
77 aa =iota78 ab79 as = "Love"
80 ac81 ad =iota82 ae83 )84 f.Println("const:", aa, ab, as, ac, ad, ae)85 }86 /*6 7 if (语句;)条件 {87 ...88 } else {89 ...90 }91 */
92 func func_if(){93 f.Println("条件判断(if...else...)举例:")94 const ( //No5
95 aa =iota96 ab97 as = "Love"
98 ac99 ad =iota100 ae101 )102 //条件判断表达式
103 if aa == 1 { //No6
104 f.Println("aa is:", aa)105 }else if (aa+1) == 1{106 f.Println("ab is:", ab)107 }else{ //No7
108 f.Println(as)109 }110 }111
112 /*8 for .. ;条件; .. {113 ...114 }115 */
116 func func_for(){117 f.Println("循环判断(for)及数组定义举例:")118 //定义数组方法.
119 var arr[10] int;120 for i:=0; i<10; i++{//No7 跳出for循环,i就失效了.
121 arr[i]=i122 }123 for i:=0; i<10; i++{124 f.Printf("arr[%d]:%d",i,arr[i])125 }126 f.Println("");127 a3:=[3] int {1,2,3}128 for i:=0; i<3; i++{129 f.Printf("a[%d]:%d",i,a3[i])130 }131 f.Println("");132 a4 := [...] int {1,2,3,4,5,6,7}133 for i:=0; i<7; i++{134 f.Printf("a[%d]:%d",i,a4[i])135 }136 f.Println("")137 a := [2][2] int {[2] int{1,2}, [2] int {3,4}}138 b := [2][2] int {[...] int {5,6}, [...] int {7,8}}139 c := [2][2] int {{9,10},{11}}140 for i:=0; i<2; i++{141 for j:=0; j<2; j++{142 f.Printf("a[%d][%d]=%d, b[%d][%d]=%d, c[%d][%d]=%d\n",+
143 i,j,a[i][j],i,j,b[i][j],i,j,c[i][j])144 }145 }146 f.Println("");147 }148 /*9 switch 语句,变量,常量,... {149 10 case X1,...,Xn:150 ...151 11 case Y1,...,Yn: fallthrough //若匹配不到,则自动向下尝试.152 case Z1:153 f() //当匹配到Z1时,因为有fallthrough所以会调用f().154 ...155 12 default:156 ...157 }158 */
159 func func_switch(key int){160 f.Println("switch { case: .. case: .. default: ... }接口测试举例:")161 const ( //No5
162 aa =iota163 ab164 as
165 ac166 ad167 ae168 )169 switch key{//No9
170 case aa: //No10
171 f.Println("key is", aa)172 case ab, as: //ab, as is display ab
173 f.Println("key is", ab)174 case ac: //ac is lost
175 casead:176 f.Println("key is", ad)177 case ae: fallthrough //No11 ae is not lost
178 default: //No12
179 f.Println("Default key is", key)180 }181 }182 /*13 type 别名183 type mytype int184 */
185 func func_type(){186 f.Println("type测试举例:")187 type mytype int //No13
188 vara mytype189 a=10
190 f.Println(a)191 }192 /*14 map[]193 15 range194 在 Go 中有 map 类型.195 map 可以认为是一个用字符串做索引的数组(在其最简单的形式下)196 */
197 func func_map(){198 monthdays := map[string]int{199 "Jan":31,"Feb":28,"Mar":31,"Apr":30,200 "May":31,"Jun":30,"Jul":31,"Aug":31,201 "Sep":30,"Oct":31,"Nov":30,"Dec":31, //最后必须有逗号,
202 }203 md := make(map[string]int) //No14 声明map的方法.
204 md = monthdays; //这种方式是指向同一个内存,若操作均发生变化.
205 f.Println(monthdays)206 f.Println(md)207 value,ok := monthdays["Jun"]208 f.Println("md's length=",len(md), "monthdays' length=", len(monthdays), value, ok)209 monthdays["Jun"] = 0, false //删除该元素 方法1.
210 v,o := monthdays["Jun"]211 f.Println(monthdays)212 f.Println(md)213 f.Println("md's length=",len(md), "monthdays' length=", len(monthdays), v, o)214 mk := make(map[string]int) //声明map的方法.
215 for key,ve := range monthdays{ //No15
216 mk[key]=ve //这种方式赋值,不会使用monthdays的空间.
217 }218 f.Println(mk)219 delete(mk, "Jan") //删除该元素 方法2.
220 f.Println("mk is:", mk)221 f.Println("monthdays is", monthdays)222 }223 /*16 goto224 goto标签,函数内部跳转.225 */
226 func func_goto(){227 i := 0
228 next:229 if i<10{230 f.Printf("%d", i)231 i=i+1
232 goto next //No16
233 }234 f.Printf("\ni=%d>=10, Func_goto is stoped!\n", i)235 }236 /*17 defer 延后执行方法237 18 return 返回值列表238 func func_name(){239 file.Open("filename")240 defer file.Close() //在func_name()函数退出前执行close241 ...242 }243 */
244 func readfile() string{245 fi,err := os.Open("json.go")246 if err !=nil{247 panic(err)248 }249 defer fi.Close() //No17
250 chunks := make([]byte,1024,1024)251 buf := make([]byte,1024)252 for{253 n,err :=fi.Read(buf)254 if err != nil && err !=io.EOF{255 panic(err)256 }257 if 0==n { break}258 chunks=append(chunks, buf[:n]...)259 f.Println(string(buf[:n]))260 }261 return string(chunks) //No18
262 }263 /*19 struct 结构体264 type 别名 struct{265 var1 vartype266 var2 vartype267 ...268 }269 *20 continue 继续下一个270 *21 break 跳出本次循环271 */
272 func func_struct(){273 type student struct{ //No19
274 id int
275 score int
276 name string
277 }278 var s[10] student279 for i:=0; i<10; i=i+1{280 s[i].id=i+10
281 s[i].score=i+10
282 s[i].name="Name"+strconv.Itoa(i)283 }284 for i:=0; i<10; i++{285 if i%2==0 { continue }//No20
286 if i%5==0 { break }//No21
287 f.Println(s[i])288 }289 for i,value:=range s{290 f.Println(i, value)291 }292 f.Println(s)293 }294 /*22 interface295 方法集合296 */
297 type S struct{298 i int
299 }300 func (p *S) Get() int{301 returnp.i302 }303 func (p *S) Put(v int){304 p.i=v305 }306 type I interface{307 Get() int
308 Put(int)309 }310 func func_interface(p I){311 p.Put(15)312 f.Println("Interface is:",p.Get())313 }314 /*23 go315 */
316 func myprint(s string){317 f.Printf("%v is Ready!\n", s)318 }319 func func_go(){320 go myprint("I")321 go myprint("Love")322 go myprint("Golang")323 f.Println("func_go is Waiting")324 }