文件名&关键字&标识符、变量声明、流程控制语句

文件名&关键字&标识符

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

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

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

4、保留关键字

2、go程序的基本结构

package main
import “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 add

var Name string = "xxxxx"
var Age int = 100    //声明变量的时候赋值,:=相当于执行的时候赋值,执行语句必须有入口

/*

var Name string
var Age int

//Name = "hello world"  直接赋值报错,因为这就相当于执行语句,go中执行语句必须有入口,不然编译报错
//Age = 10
    

// 每个源文件都可以包含一个init函数,这个init函数自动被go运行框架调用。
*/
func init () {
    Name = "hello world"
    Age = 10
    
}

main/main.go

package main

import(
    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 int
var v2 string
var v3 [10]int
var v4 []int
var v5 struct{
    f int
}
var v6 *int
var v7 map[string]int
var v8 func(a int) int

变量声明时的初始化:

var v1 int = 10
var v2 = 10
v3 := 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=100
if 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 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for 循环内使用。在 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:=0
HERE:
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<n;i++{ ch := str[i] fmt.Println(i,ch) }

 

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<n;i++{
        if n%i==0{
            return false
        }
    }
    
    return true
}


func isNarcissistic(n int) bool{
    if n<100 || n>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

 

 

 

 

 

 

 

posted @ 2017-12-05 22:00  shy车队破风手  阅读(332)  评论(0编辑  收藏  举报