通用技术 GoLang 起航 (一)

49875183 · 2016年01月29日 · 最后由 天琴圣域 回复于 2016年02月01日 · 1189 次阅读

一切都是从 Hello,World 开始

package main  //包声明
import "fmt"  //引入包
/*
main 函数是每一个可执行程序所必须包含的
*/
func main() {   
   fmt.Println("Hello, World!")
}

注释:

多行注释 /* */
单行注释 //

变量声明:

声明关键字var
变量名由字母、数字、下划线组成,其中首个字母不能为数字

var val = "values"                         //关键字+变量名
var name string                            //关键字+变量名+类型
var pas string = "pas"                     //关键字+变量名+类型+值
var name1, name2 string                    //关键字+多个变量名+类型
var name3, name4 string = "name1", "name2" //关键字+多个变量名+类型+值
var name5, name6 = "name5", "name6"
var name7, name8 = "name7", 8
var (
    a1 = "a1"
    b1 = "b1"
)

还有一种特殊简短声明方式 :=

name1 := "xxxxxxx" //相当于 var name1 =”xxxxxxx”

这种方式只能在函数内部使用,全局变量一般用 var 定义
还要注意的一点就是如果变量声明在函数内部的话,变量必须被使用,否则的话会编译失败!

常量:

声明关键字 const
变声明的常量参数的值,不允许被修改
常量也可以用 len() 等表达式的计算常量的值,不过表达中的函数必须是内置函数

const a int = 10
const (
    d1 = "d1"
    d2 = 20
    d3 = len(d1)
)

还有一个特殊的枚举:
声明关键字 iota

const (
        x1 = iota  //从0开始
        y1 = iota  //1
        z1         //默认会变成iota类型 值为2  
)

在同一行的时候都是 0(不太明白这个的用处)

条件/循环语句:

  • IF
    ```erb package main

import "fmt"

//这里是 main 方法
func main() {
var v int = 10
//第一种形态
if v > 0 {
fmt.Println("v 大于 0")
} else {
fmt.Println("v 小于 0")
}
//第二种形态
if v > 0 {
fmt.Println("8 is divisible by 4")
}
//第三种形态,可以在条件前先进行变量声明
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}

}

-  **FOR**
```erb
package main

import "fmt"

func main() {

    i := 1
    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }

    for j := 7; j <= 9; j++ {
        fmt.Println(j)
    }

    for {
        fmt.Println("loop")
        break
    }
}
  • Switch (唯一不同的是,分支不需要再人工添加 break,可以使用 fallthrough 关键字来强制执行所有 case ) ```erb package main

import "fmt"
import "time"

//这里是 main 方法
func main() {

i := 10

//第一种形态
switch i {
case 1:
fmt.Println("输入的是 1")
case 2:
fmt.Println("输入的是 2")
}

//第二种形态
switch time.Now().Weekday() {
case time.Thursday, time.Friday: //可以有多个表达式
fmt.Println("在星期 4、星期 5 的范围")
default:
fmt.Println("其他范围时间段")
}

//第三种形态 ,不需要表达式
switch {
case i == 10:
fmt.Println("i 等于 10")
default:
fmt.Println("是其他范围的数值")

}

}

-  **Select**

```erb
package main

import "fmt"
import "time"

//这里是main方法
func main() {

    ch := make(chan int)
    ch1 := make(chan bool)
    ch2 := make(chan int)

    go func() {
        time.Sleep(time.Second * 1)
        ch <- 10
    }()

    go func() {
        time.Sleep(time.Second * 2)
        ch1 <- true
    }()

    go func() {
        time.Sleep(time.Second * 3)
        ch2 <- 30
    }()

    for i := 0; i < 4; i++ {
        select {
        case <-ch:
            //做一些想做的事
            fmt.Println("进入ch")
        case <-ch1:
            //做一些想做的事
            fmt.Println("进入ch1!")

        case <-ch2:
            //做一些想做的事
            fmt.Println("进入ch2!")
        }
    }

}

Arrays:数组

package main

import "fmt"

//这里是main方法
func main() {

    var strarrays [3]string
    strarrays[0] = "a"
    strarrays[1] = "b"
    strarrays[2] = "c"
    fmt.Println("strarrays:", strarrays)

    for i := 0; i < len(strarrays); i++ {
        fmt.Println(strarrays[i])
    }

    //多维数组
    var arraystwo [2][2]string
    fmt.Println(arraystwo)
    arraystwo[0][0] = "0,1"
    fmt.Println(arraystwo)
    arraystwo[1][1] = "1,1"
    fmt.Println(arraystwo)

}

Slices:切片,感觉和 python 好像的说

package main

import "fmt"

//这里是main方法
func main() {

    a := make([]string, 4)
    fmt.Println("原始的:", a)

    a[0] = "a"
    a[1] = "b"
    a[2] = "c"
    a[3] = "d"
    fmt.Println("a==:", a)
    fmt.Println("切片0-2的值:", a[0:2])

    a = append(a, "e") //支持追加
    fmt.Println(a)

    b := make([]string, len(a))
    copy(b, a) //将a的内容复制到b
    fmt.Println(b)

    fmt.Println(b[:3]) //b[0:3]
    fmt.Println(b[3:]) ////b[3:len(b)]

}

Maps:字典

package main

import "fmt"

//这里是main方法
func main() {

    //第一种形态
    map1 := make(map[string]string)

    map1["name"] = "name"
    map1["passd"] = "123456"

    fmt.Println("map:", map1)

    //第二种形态
    map2 := map[string]string{"name": "name", "passd": "123456"}
    fmt.Println("map:", map2)

    delete(map2, "passd") //删除passd节点
    fmt.Println("map:", map2)

    fmt.Println(map2["name"]) //通过key"name"读取val

    map3 := map[int]string{1: "name", 2: "123456"} //定义key为int类型;val为string类型
    fmt.Println(map3)

}

遍历

package main
import "fmt"

//这里是main方法
func main() {

    nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

    for i, num := range nums {
        if num == 3 {

        }
        fmt.Println("index:", i)
    }

    maps := map[string]string{"name": "name", "passd": "passd"}
    for k, v := range maps {
        fmt.Println("key:" + k + "      val:" + v)
    }

    for i, c := range "goo" { 
        fmt.Println(i, c)  //遍历字符串返回Unicode码
    }
}
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 6 条回复 时间 点赞

这是下一个统治世界的语言.

#1 楼 @seveniruby 感觉就像 java+python 的混合体。。。。

#2 楼 @xushizhao var + const 让我想起 swift 。

#3 楼 @chenhengjie123 要学的东西,越来越多了,哎

—— 来自 TesterHome 官方 安卓客户端

#4 楼 @xushizhao 要学的东西一直都很多。。。要找准路线,否则学杂了就没太大意义了。

真的和 Python 好像啊,倒是第一次知道切片。。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册