golang基本语法

基本语法

go语言基本的数据类型

1.布尔型
bool 布尔型的值只可以是常量 true 或者 false.
2.数字型
整形 int;浮点型float
3.字符串型
string 储存一串字符
4.指针(pointer)
5.数组
6.结构体(struct)
7.channel(通道)
在程序中充当锁机制,可以接受发送值,也可以只接收或只发送.(具体语法参照:go toper: channel)
用于接收和传递值(后面有一个实例)
8.函数型(由函数定义生成)
通常在框架中用到
9.切片(slice)
大小灵活的数组
10.接口(interface) (详情参照 :嘉月的博客: ininterface)
它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。(官方解读)
11.map(集合)
一个key,一个value.

go语言变量声明的几个方法

//一般
var i int  /*声明*/
i=1
j:=1  /*效果相同*/
//make,主要用于初始化数组或map
var ss []int
	//不用make初始化就不能用
	ss = make([]int, 2)
	s := make([]int, 2)
	M := make(map[string]string, 2)
	fmt.Printf("s=%#v\n", s)
	fmt.Printf("ss=%#v\n", ss)
	fmt.Printf("M=%#v\n", M)
	fmt.Printf("i=%#v\n", i)
	fmt.Printf("j=%#v\n", j)
	//变量不使用也会报错(-__-)

运算符

所有语言的运算符几乎差不多
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符(&:取址;*:指针变量)

条件语句

1.if/else
2.switch/case
3.select/case(随机case若无可用case则阻塞)

循环

for:可以有多种用法.

for i := 0; i < 2; i++ {
		fmt.Printf("i=%#v\n", i)
	}
	i := 0
	//类似while用法
	for i < 2 {
		fmt.Printf("i=%#v\n", i)
		i++
	}
	// 遍历
	var j [2]int
//Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
	for k, v := range j {
		fmt.Printf("k=%#v\n", k)
		fmt.Printf("v=%#v\n", v)
	}

函数

用func定义
递归就是函数调用自身

func addperson(i int) {
   if i > 10 {  //没有条件就是一个死循环
   	return
   }
   addperson(i + 1)
   fmt.Printf("i=%#v\n", i)
}
func main() {
   addperson(1)
}

并发

go+函数名(又叫goroutine线程)在主程序的基础上开子程序,提高程序效率.

func print_1() {
	for i := 0; i < 10; i++ {
		fmt.Printf("1\n")
	}
}
func print_2() {
	for i := 0; i < 10; i++ {
		fmt.Printf("2\n")
	}
}
func print_3() {
	for i := 0; i < 10; i++ {
		fmt.Printf("3\n")
	}
}
func main() {
	go print_3()
	go print_1()
	go print_2()

	time.Sleep(5 * time.Second)
}

简单的并发程序
题目:使用 goroutine 和 channel 实现顺序打印 张三, 李四,王五,赵六 10 次
开 4 个 goroutine(线程)chan 实现顺序打印

func printZ() {
	fmt.Println("张三")

}
func printL() {
	fmt.Println("李四")
}

func printW() {
	fmt.Println("王五")
}

func printZA() {
	fmt.Println("赵六")
}
func main() {
	ch1 := make(chan bool, 2)
	ch2 := make(chan bool, 2)
	ch3 := make(chan bool, 2)
	ch4 := make(chan bool, 2)
	go func() {
		ch1 <- true
	}()
	for i := 0; i < 10; i++ {

		if <-ch1 {
			go printZ()
			ch2 <- true

		}

		if <-ch2 {
			go printL()
			ch3 <- true

		}

		if <-ch3 {
			go printW()
			ch4 <- true

		}

		if <-ch4 {
			go printZA()
			ch1 <- true

		}
	}
	println("OK")

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值