《学习 Go 语言》学习心得

一、前言

对于Goland,会发现有很多和 C 语言相似的地方,毕竟其开发组一个核心人物 肯·汤普森,是 C 语言的核心重要开发者之一。

二、demo

前人云:不动笔墨不读书
作为程序员:“不敲代码不读书”

1、变量常量
package main

import "fmt"

func main() {

	// 1.先声明,再赋值
	var a int
	a = 1
	fmt.Println(a) // 1

	// 2.声明 + 赋值
	b := 2
	var score int = 148
	fmt.Println(b, score) // 2 148

	// 3.同时声明多个变量
	var (
		x int
		y int
	)
	x = 192
	y = 168
	fmt.Println(x, y) // 192 168

	// 4.声明 + 位数:8/16/32/64(默认根据本机硬件)
	var num int32
	fmt.Println(num) // 0

	// 5.bool
	var status bool
	status = true
	fmt.Println(status) // true

	// 6.string
	var s string
	s = "ITAEM"
	fmt.Println(s) // ITAEM

	// 7.const,常量,不可变值
	const max int = 5
	fmt.Println(max) // 5

	// 8.声明赋值多个常量
	const (
		userName = "root"
		password = "123"
	)
	fmt.Println(userName, password) // root 123

	// 9、Printf
	var mimu int = 6
	var word string = "骁龙835"
	fmt.Printf("小米%d 处理器:%s", mimu, word) // 小米6 处理器:骁龙835

}

/**
注意点:
① 声明变量,但未使用,程序会报错
② 不同位数的变量运算将报错
③ 常量不可变值
 */

这里写图片描述

2、流程控制
package main

import "fmt"

func main() {

	// 1 if-else 条件判断
	var flag bool = true
	if flag {
		fmt.Println("ok")
	} else {
		fmt.Println("fail")
	}

	// 2 for 循环
	var total int = 0
	for i := 1; i <= 100; i++ {
		total += i
	}
	fmt.Println(total)

	// 3 break
	for i := 1; i < 10; i++ {
		if i == 5 {
			break
		}
		fmt.Print(i)
	}
	fmt.Println()

	// 4 continue
	for i := 1; i < 10; i++ {
		if i%2 == 0 {
			continue
		}
		fmt.Print(i)
	}
	fmt.Println()

	// 5 range
	list := [] string{"I", "T","A","E","M"}
	for k,v:= range list {
		fmt.Println(k,v)
	}

	// 6 switch
	choice := 2
	switch choice {
	case 1:
		fmt.Println(1)
	case 2:
		fmt.Println(2)
	case 3:
		fmt.Println(3)
	default:
		fmt.Println("others")
	}

	// 7 输入
	var input int
	fmt.Scanln(&input)
	fmt.Println(input)

	// 8 延时加载:类似栈
	for i:=0;i<5;i++ {
		defer fmt.Print(i) // 4 3 2 1 0
	}

}

这里写图片描述

3、数组
package main

import "fmt"

func main() {

	// 1.一维 array
	var arr [100] int
	arr[0]=520
	fmt.Println(arr[0])

	// 2.二维 array
	arr2 := [3][2] int { [2]int{1,2},[2]int{3,4},[2]int{5,6}}
	fmt.Println(arr2[0][0])

	// 3.1 array  CRUD
	s0 := []int{0,1}
	// 3.2 增
	s1 :=append(s0,2)
	fmt.Println(len(s1))
	// 3.3 取 array
	s2 :=s0[0:2]
	fmt.Println(len(s2)) // 0,1

	// 4.1 map	CRUD
	team := map[string]string{
		"ITAEM":"04008",
		"wTeam":"04009",  // 逗号必须的
	}
	// 4.2 显
	fmt.Println(team["ITAEM"])
	// 4.3 删
	delete(team,"ITAEM")
	// 4.4 查
	var room string
	var exist bool
	room,exist=team["ITAEM"]
	fmt.Println(room,exist)
	// 4.5 增、改
	team["ITAEM"]="钟海楼04008"
	fmt.Println(team["ITAEM"])

}

这里写图片描述

4、函数
package main

import (
	"fmt"
)

func main() {

	var a=5
	show(a)

	add(&a)
	show(a)

	fmt.Println(getTeamName())
	fmt.Println(getTeam())

	fmt.Println(getSum(1,2,3,4,5))

}

func show(a int)  {	  // 打印输出
	fmt.Println(a)
}

func add(a *int)  {  // 传引用,修改值
	*a=*a+1
}

func getTeamName() string {  // 单返回值
	return "ITAEM"
}

func getTeam()(string,string)  {  // 多返回值
	return "ITAEM","04008"
}

func getSum(arg ...int) int  {  // 变参
	var total =0
	for i := 0; i<len(arg);i++  {
		total +=arg[i]
	}
	return total
}

这里写图片描述

5、包

这里写图片描述

package cun

import "fmt"

func Show()  {	// 大写字母开头,可以导出
	fmt.Println(666)  // 666
}
package main

import "awesomeProject/cun"

func main() {
	cun.Show()
}

这里写图片描述

6、指针
package main

import "fmt"

func main() {
	var p *int
	fmt.Println(p) // <nil>

	var a int
	p = &a
	fmt.Println(p) // 0xc04204e088

	fmt.Println(*p) // 0

	*p=666
	fmt.Println(a) // 666,成功修改了 a
	fmt.Println(*p) // 666

}

这里写图片描述

7、结构体
package main

import "fmt"

// 1.1 struct
type Student struct {
	name string
	age int
}

func main() {

	// 1.2 struct
	a := new(Student)
	a.age=18
	a.name="rxy"
	fmt.Println(a)  // &{rxy 18}

}

这里写图片描述

8、接口
package main

import (
	"fmt"
)
// 1.接口
type Phone interface {
	call()
}

// 2.类型
type NokiaPhone struct {
}
type IPhone struct {
}

// 3.实现
func (nokiaPhone NokiaPhone) call() {
	fmt.Println("I am Nokia, I can call you!")
}
func (iPhone IPhone) call() {
	fmt.Println("I am iPhone, I can call you!")
}

func main() {
	var phone Phone

	phone = new(NokiaPhone)
	phone.call()

	phone = new(IPhone)
	phone.call()

}

这里写图片描述

9、并发
package main

import (
"time"
"fmt"
)

func ready(w string,sec  int) {
	time.Sleep(time.Duration(sec)*time.Second)
	fmt.Println(time.Now(),w,"is ready!")
}
func main() {
	go ready("Tea",2)
	go ready("Coffee",1)
	fmt.Println("I am waiting...")
	time.Sleep(5*time.Second) // 没有这一句,程序立刻结束,将看不到预期的效果
}

这里写图片描述

10、通讯
package main

import (
	"net"
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	// 1 net:tcp、udp
	conn1,e :=net.Dial("tcp","120.79.197.130:8080")
	fmt.Println(conn1)
	fmt.Println(e )

	// 2 http
	r,err := http.Get("https://blog.csdn.net/larger5")
	fmt.Println(ioutil.ReadAll(r.Body))
	fmt.Println(err)

}

这里写图片描述

三、其他

有空再更新 web服务端 方面的

Go 并发:
Do not communicate by sharing memory; instead, share memory by communicating.
“不要以共享内存的方式来通信,相反,要通过通信来共享内存。”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值