博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件名&关键字&标识符、变量声明、流程控制语句
阅读量:5224 次
发布时间:2019-06-14

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

文件名&关键字&标识符

1、所有go源码以.go结尾

2、标识符以字母或下划线开头,大小写敏感(Boy 大写的标识符其他包可以调用)

3、_是特殊标识符,用来忽略结果

4、保留关键字

2、go程序的基本结构

package mainimport “fmt”func main() {    fmt.Println(“hello, world”)}

1. 任何一个代码文件隶属于一个包

2. import 关键字,引用其他包:

import(“fmt”)

import(“os”)

通常习惯写成:

import (

  “fmt”

  “os

 )

3. golang可执行程序,package main, 并且有且只有一个main入口函数

4. 包中函数调用:

  a. 同一个包中函数,直接调用  

  b. 不同包中函数,通过包名+点+ 函数名进行调用

  c.每个源文件都可以包含一个init函数,这个init函数自动被go运行框架调用。

  d.执行顺序,先执行全局变量初始化,然后执行init函数,然后实行main函数。

5. 包访问控制规则:

  a.大写意味着这个函数/变量是可导出的

  b.小写意味着这个函数/变量是私有的, 包外部不能访问

add/add.go

package addvar Name string = "xxxxx"var Age int = 100    //声明变量的时候赋值,:=相当于执行的时候赋值,执行语句必须有入口/*var Name stringvar Age int//Name = "hello world"  直接赋值报错,因为这就相当于执行语句,go中执行语句必须有入口,不然编译报错//Age = 10    // 每个源文件都可以包含一个init函数,这个init函数自动被go运行框架调用。
*/
func init () {    Name = "hello world"    Age = 10    }

main/main.go

package mainimport(    a "go_dev/day2/example2/add" // a为包的别名,如果别名为_导入初始化而不引用 "fmt")func main() {    fmt.Println("Name=", a.Name)    fmt.Println("age=", a.Age)}

函数声明和注释

1、函数声明: func   函数名字 (参数列表) (返回值列表){}

func add() {} func add(a int , b int) int {} func add(a int , b int) (int, int) {}

2、 注释,两种注释,单行注释: // 和多行注释  /* */

 

变量声明

var v1 intvar v2 stringvar v3 [10]intvar v4 []intvar v5 struct{    f int}var v6 *intvar v7 map[string]intvar v8 func(a int) int

变量声明时的初始化:

var v1 int = 10var v2 = 10v3 := 10 //不能用于全局变量的声明

 

条件判断、选择、循环

1、条件判断

if case1{  //}else if case2{  // }else{}

 

if ture{    //}if a==1&&b==1{    //}if b<0 || b>10{    //}if c !=0{    //}

if语法糖

var b=100if b>200{}//语法糖if b:=10;b>200{}

2、选择语句

switch i {        case 0:            fmt.Println(0)        case 1:            fmt.Println(1)    }

3、循环语句

for init;case1;modify{} for a = 0; a < 10; a++ {
  fmt.Println(a) }

死循环

for case1{}var a int = 0 for a < 10 {
  fmt.Println(a)   a++ } //无限循环for{}

跳出指定的外层循环、继续循环:

break

break 语句可以结束 for、switch 和 select 的代码块。break 语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的 for、switch 和 select 的代码块上。

for{    if i>10{         break } }
JLoop:        for j:=0;j<5;j++{            for i:=0;i<10;i++{ if i>5{ break JLoop } fmt.Println(i) } }

continue

continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 内使用。在 continue 语句后添加标签时,表示开始标签对应的循环。

for{    if i>10{        continue    }}

 

OuterLoop:    for i := 0; i < 2; i++ {        for j := 0; j < 5; j++ {            switch j {            case 2:                fmt.Println(i, j)                continue OuterLoop            }        }    }

 4、跳转语句

i:=0HERE:fmt.Println(i)i++if i<10{  goto HERE}

5、for range: 遍历数组、切片、map、管道类型

  • 数组、切片、字符串返回索引和值。
  • map 返回键和值。
  • 通道(channel)只返回通道内的值。

遍历数组、切片

for key, value := range []int{
1, 2, 3, 4} { fmt.Printf("key:%d value:%d\n", key, value)}

字符串:

  • ASCII 字符串遍历直接使用下标。
  • Unicode 字符串遍历用 for range。
str := "hello world"    for index, val := range str {        fmt.Printf("index:%d val:%c \n", index, val)    }

 

//这种遍历是以字节的形式遍历的 str := "hello 世界"n := len(str)for i :=0;i

 

map:

m := map[string]int{        "hello": 100,        "world": 200,    }    for key, value := range m {        fmt.Println(key, value)    }

 

 习题:

1. 判断 101-200 之间有多少个素数,并输出所有素数。

2. 打印出100-999中所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字 立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次 方+5 的三次方+3 的三次方。 

3. 对于一个数n,求n的阶乘之和,即: 1! + 2! + 3!+…n! 

package main// godoc -http=:9001  然后127.0.0.1查看go的文档import{    "fmt"    "math"   }func main(){    for i:=101;i<200,i++{        if isPrime(i){            fmt.Println(i)        }            }        for i:=100,i<999;i++{        if isNarcissistic(i){            fmt.Println(i)        }    }        fmt.Println(factorial(10))        }func isPrime(n int) bool{    if n<=1{        return false    }    for i:=2;i
999{ return false } i,j,k := float64(n/100),float64(n/10%10),float64(n%10) if math.Pow(i,3)+math.Pow(j,3)+math.Pow(k,3)==float64(n){ return true } return false }func factorial{ if n<=0{ return -1 var cnt int for i:=2;i<=n;i++{ cnt=cnt *i } return cnt }
View Code

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/domestique/p/7989686.html

你可能感兴趣的文章
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>
Linux升级内核教程(CentOS7)
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>