1.数据类型
package main
import "fmt"
func main() {
//布尔
fmt.Println("-------------布尔-------------")
var bool_test = true
fmt.Println("var bool_test = true >> ",bool_test)
//数字
fmt.Println("-------------数字-------------")
var num1 int = 1 // var num1 int8/16/32/64
fmt.Println("var num1 = 1 >> ",num1)
//字符串
fmt.Println("-------------字符串-------------")
var str = "我是一个字符串"
fmt.Println("var str = \"我是一个字符串\" >> ",str)
}
2.变量和常量
1.变量
package main
//var a = "菜鸟教程"
//var b string = "runoob.com"
//var c bool
var x, y int
var ( // 这种因式分解关键字的写法一般用于声明全局变量
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
func main() {
//变量声明
//第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type
v_name = value
//第二种,根据值自行判定变量类型。
var v_name = value
//第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
v_name := value
//
例如
var a int = 10
var b = 10
c := 10
print(a,b,c)
//=================================================
类型相同多个变量, 非全局变量
//var vname1, vname2, vname3 type
// vname1, vname2, vname3 = v1, v2, v3
//var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要显示声明类型,自动推断
//vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误
这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}
2.常量
package main
import "fmt"
func main() {
const LENGTH int = 10
const WIDTH int = 5
var area int
const a, b, c = 1, false, "str" //多重赋值
area = LENGTH * WIDTH
fmt.Printf("面积为 : %d", area)
println()
println(a, b, c)
}
3.条件和循环
1.if判断
package main
import "fmt"
func main() {
var flag = 1
if flag == 1{
fmt.Println("input 1")
}else if flag == 2{
fmt.Println("input 2")
}else {
fmt.Println("error")
}
}
2.switch判断
package main
import "fmt"
func main() {
/* 定义局部变量 */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等级是 %s\n", grade );
}
3.for循环
package main
import "fmt"
func main() {
var flag = 10
var i = 0
for i <flag {
i++
fmt.Print(i)
}
}
4.函数
1.普通函数
package main
import "fmt"
func main() {
fmt.Print(max(1,2))
}
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
2.多返回值函数
package main
import "fmt"
func main() {
s, i := show("cxl")
fmt.Print(s,i)
}
func show(name string)(string,string){
return "你输入的是"+name,"你好"+name
}
5.数组和指针
1.数组
package main
import "fmt"
func main() {
var i int
var arr = [3] int {1,2,3}
fmt.Print(arr)
//可变长度数组
var arr2 = [...] int {1,2,3,4,5,6,7}
fmt.Print(arr2)
//遍历
for i = 0;i< len(arr2);i++ {
fmt.Println(arr2[i])
}
}
2.指针
package main
import "fmt"
func main() {
//一个指针变量指向了一个值的内存地址。
//类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:
//var var_name *var-type
var a int = 1
fmt.Printf("变量的地址: %x\n", &a)
}
6.结构体和切片
1.结构体
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
// 创建一个新的结构体
fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})
// 也可以使用 key => value 格式
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})
// 忽略的字段为 0 或 空
fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
}
2.切片
package main
import "fmt"
func main() {
var numbers = make([]int,3,5)
printSlice(numbers)
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
7.集合
package main
import "fmt"
func main() {
var countryCapitalMap map[string]string /*创建集合 */
countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap [ "France" ] = "Paris"
countryCapitalMap [ "Italy" ] = "罗马"
countryCapitalMap [ "Japan" ] = "东京"
countryCapitalMap [ "India " ] = "新德里"
/*使用键输出地图值 */
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap [country])
}
delete(countryCapitalMap,"India")
fmt.Println("delete-------------------")
fmt.Println(countryCapitalMap [ "India " ])
/*查看元素在集合中是否存在 */
captial, ok := countryCapitalMap [ "美国" ] /*如果确定是真实的,则存在,否则不存在 */
/*fmt.Println(captial) */
/*fmt.Println(ok) */
if (ok) {
fmt.Println("美国的首都是", captial)
} else {
fmt.Println("美国的首都不存在")
}
}
8.并发
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("1")
go say("2")
say("3")
}
9.通道
package main
import "fmt"
func main() {
ch := make(chan int,2)
ch <- 1
ch <- 2
fmt.Println(<-ch)
fmt.Println(<-ch)
}
练习
1.九九乘法表
package main
import "fmt"
var(
i int
)
func main() {
var i int
for i = 0;i<10;i++{
fmt.Printf("%d\t",get(i))
}
}
func get(n int) int {
if n < 2{
return n
}
return get(n-2)+get(n-1)
}
2.(简陋)计算器
package main
import "fmt"
var (
addNumer1 float64
addNumber2 float64
cellNumber1 float64
cellNumber2 float64
chenNumber1 float64
chenNumber2 float64
chuNumber1 float64
chuNumber2 float64
flag int //判断类型
)
func main() {
for true{
fmt.Println("1.加 2.减 3.乘 4.除")
fmt.Scanln(&flag)
switch flag {
case 1:
fmt.Println("input add1")
fmt.Scanln(&addNumer1)
fmt.Println("input add2")
fmt.Scanln(&addNumber2)
fmt.Printf("%x + %x = %x ",addNumer1,addNumber2,addNumer1+addNumber2)
fmt.Println("")
case 2:
fmt.Println("input cell1")
fmt.Scanln(&cellNumber1)
fmt.Println("input cell2")
fmt.Scanln(&cellNumber2)
fmt.Printf("%x - %x = %x ",cellNumber1,cellNumber2,cellNumber1-cellNumber2)
fmt.Println("")
case 3:
fmt.Println("input chen1")
fmt.Scanln(&chenNumber1)
fmt.Println("input chen2")
fmt.Scanln(&chenNumber2)
fmt.Printf("%x * %x = %x ",chenNumber1,chenNumber2,chenNumber1*chenNumber2)
fmt.Println("")
case 4:
fmt.Println("input add1")
fmt.Scanln(&chuNumber1)
fmt.Println("input add2")
fmt.Scanln(&chuNumber2)
fmt.Printf("%x / %x = %x ",chuNumber1,chuNumber2,chuNumber1/chuNumber2)
fmt.Println("")
default:
fmt.Println("error")
break
}
}
}
3.斐波那契数列
package main
import "fmt"
var(
i int
)
func main() {
var i int
for i = 0;i<10;i++{
fmt.Printf("%d\t",get(i))
}
}
func get(n int) int {
if n < 2{
return n
}
return get(n-2)+get(n-1)
}