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(不太明白这个的用处)
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
}
}
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!")
}
}
}
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)
}
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)]
}
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码
}
}