博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【一】Go 学习笔记
阅读量:6145 次
发布时间:2019-06-21

本文共 8508 字,大约阅读时间需要 28 分钟。

所有的代码都在这里了 ↑,内附了github地址,可以直接下载!

github地址: (这里直接跳转也可以)


1.变量的认识

package mainimport "fmt"// 他可以自动检测类型// 外部声明不可以使用  := 必须声明varvar (	aa = true    bb = 123    cc = "string"    )func variableZeroValue () {    // 可以这么声明变量	var a int	var s string	fmt.Printf("%d %q\n",a,s)}func variableInitValue() {    // 也可以这样	var a,b int = 3,4	var s string = "abc"	fmt.Println(a,b,s)}func variableTypeDeduction() {    // 也可以这样	var a,b,c,d = 3,4,true,"def"	var s = "abc"	fmt.Println(a,b,c,d,s)}func variableShorter() {    // 也可以这样	a,b,c,d := 1,2,true,"string"	fmt.Println(a,b,c,d)}func main() {    // 主函数操作如下	fmt.Println("Hello, World!")	variableZeroValue()	variableInitValue()	variableTypeDeduction()	variableShorter()}vscode 打印如下:C:go\src\google_go>go run basic.goHello, World!0 ""3 4 abc3 4 true def abc1 2 true string复制代码

2.内置对象的认识

package mainimport "fmt"// 内置变量类型// bool , string// (u)int(整形),(u)int8,(u)int16,(u)int32(4字节),(u)int64,uintptr// byte(8字节) , rune(32字节)// float32,float64(浮点数) ,complex64,complex128(复数)// 强制类型转换(都是强制类型转换)// var a,b int = 3,4// var c int// c = int(math.Sqrt(float64(a*a+b*b)))// 枚举func enums() {	// iota 自增	const (		java = iota		javaScript		g0	)	fmt.Println(java,javaScript,g0)	const (		b = 1 << (10 * iota)		kb		cb	)	fmt.Println(b,kb,cb)}// 常量func main() {	const name = "shan_yi"	const age = 22	fmt.Println(name,age)	enums()}vscode 控制台打印C:\go\src\google_go>go run 2typeof.goshan_yi 220 1 21 1024 1048576复制代码

3.if-else

package mainimport "fmt"// if elsefunc main() {	aa := 1	bb := 2	// 第一种写法	// err := true	// if err {
// fmt.Println(aa) // } else {
// fmt.Println(bb) // } // 第二种写法(写法比较傻haha。。。) if err := true; err { fmt.Println(aa) } else { fmt.Println(bb) }}复制代码

4.switch

package mainimport "fmt"// 我们不需要写break;// 系统自动break;func main() {	a := 60	call := ""    	switch  {	case a < 60:		call = "E"	case a < 70:		call = "D"	case a < 80:		call = "C"	case a < 90:		call = "B"	case a < 100:		call = "A"	default:		panic(fmt.Sprintf("Error: %d", a))	}	fmt.Println(call)}// D复制代码

5.for

package mainimport "fmt"func main() {	num := 0	for i:=0;i<=100;i++{		num += i	}	fmt.Println(num)}// 5050复制代码

6.函数

package mainimport (	"fmt"	"math"	"reflect"	"runtime")func eval(a , b int, op string) int {	switch op {	case "+":		return a + b	case "-":		return a - b	default:		panic("error:" + op)	}}func apply(op func(int, int) int, a, b int) int {	p := reflect.ValueOf(op).Pointer()	opName := runtime.FuncForPC(p).Name()	fmt.Printf("call function %s with args (%d, %d)",opName,a,b)	return op(a, b)}func div(a,b int) (c,d int) {	return a / b, a % b}func pow(a,b int) int {	return int(math.Pow(float64(a), float64(b)))}// 可变参数func sum(numbers ...int) int {	s := 0	for i := range numbers {		s += numbers[i]	}	return s}func main() {	fmt.Println(eval(1,2,"+"))	c, d := div(23,5)	fmt.Println(c, d)	fmt.Println(apply(pow,3,4))	fmt.Println(sum(1,2,3,4,5))}复制代码

7.指针

package mainimport "fmt"// 值传递 没有引用传递 -> 指针修改//func swap(a,b *int) {
// *b, *a = *a, *b//}////func main() {
// a,b := 3,4// swap(&a, &b)// fmt.Println(a,b)//}// 换一种方式交换两个的值func swap(a,b int) (int, int) { return b, a}func main() { a,b := 3,4 a,b = swap(a, b) fmt.Println(a,b)}复制代码

8.数组的认识

package mainimport "fmt"func printArray(arr [5]int) {	// 值类型数组	for i, v:= range arr{		fmt.Println(i,v)	}}func main()  {	// 数组值类型	var arr1 [5]int	arr2 := [3]int{
1,2,3} // ... 编译器来决定个数 arr3 := [...]int{
2,4,6,8,10} fmt.Println(arr1,arr2,arr3) // 二维数组 // 4个数组,5个内容 var grid [4][5]int fmt.Println(grid) //[0 0 0 0 0] [1 2 3] [2 4 6 8 10] //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]] // 测试循环 //for i:= 0; i < len(arr3);i++ {
// fmt.Println(arr3[i]) //} //2 //4 //6 //8 //10 // or // range 获取数组下标 // 可以通过 _ 省略变量 // 任何地方都可以 使用 _ 省略变量 //for i, v:= range arr3{
// fmt.Println(i,v) //} //0 2 //1 4 //2 6 //3 8 //4 10 // range // 1. 美观,意义明确 // 2. c++:没有类似功能 // 3. java/python:只能for each value,不能同时获得 i,v printArray(arr1)}复制代码

9.切片

package mainimport "fmt"func updateSlice(arr []int) {	arr[0] = 100}func main()  {	arr := [...]int{
0,1,2,3,4,5,6,7} fmt.Println("dataArray:",arr[2:6]) //dataArray: [2 3 4 5] fmt.Println("dataArray:",arr[2:]) //dataArray: [2 3 4 5 6 7] fmt.Println("dataArray:",arr[:6]) //dataArray: [0 1 2 3 4 5] fmt.Println("dataArray:",arr[:]) //dataArray: [0 1 2 3 4 5 6 7] //Reslice a1 := arr[2:] updateSlice(a1) fmt.Println(a1) //[100 3 4 5 6 7] fmt.Println(arr) //[0 1 100 3 4 5 6 7] // slice 底层view 向后扩展 // [3,6] // [3,4] //arr := o,1,2,3,4,5,6,7 arr1 := append(a1, 8) arr2 := append(arr1, 9) arr3 := append(arr2, 10) fmt.Println(arr1,arr2,arr3,arr) //[100 3 4 5 6 7 8] [100 3 4 5 6 7 8 9] [100 3 4 5 6 7 8 9 10] [0 1 100 3 4 5 6 7]}复制代码

10.slice 操作

package mainimport "fmt"func printSlice(s []int) {	fmt.Println(len(s),cap(s))}func main() {	var s []int // zero value for slice is nil	for i:= 0;i<10;i++{		s = append(s, 2*i+1)	}	fmt.Println(s)	//[1 3 5 7 9 11 13 15 17 19]	printSlice(s)	//10 16	s1 := make([]int,10,16)	printSlice(s1)	//10 16	copy(s1, s)	fmt.Println(s1)	//[1 3 5 7 9 11 13 15 17 19]}复制代码

11.map

package mainimport "fmt"func main() {	m := map[string]string{		"name": "shan_Yi",		"age": "1997",		"sex": "男",	}	fmt.Println(m)	m2:=make(map[string]int) // empty map	var m3 map[string]int // nil	fmt.Println(m2,m3)	//map[] map[]	for k,v := range m {		fmt.Println(k,v)	}	// map hash map 无序	// 如果没有存在key 则为 zero value	if causeName, ok := m["colors"]; ok {		fmt.Println(causeName)	} else {		fmt.Println("key does not exist")	}	fmt.Println("delete values")	name, ok := m["name"]	fmt.Println(name,ok)	delete(m,"name")	name, ok = m["name"]	fmt.Println(name,ok)        // golang 控制台    //map[age:1997 name:shan_Yi sex:男]    //map[] map[]    //name shan_Yi    //age 1997    //sex 男    //key does not exist    //delete values    //shan_Yi true    // false}复制代码

12. map_

package mainimport "fmt"func lengthOfNonRepeatingSubStr(s string) int {	// byte 英文字符 阿斯克码	lastOccurred := make(map[byte]int)	start := 0	maxLength := 0	for i,ch := range []byte(s) {		if lastI,ok := lastOccurred[ch]; ok && lastI >= start {			start = lastI + 1		}		if i - start + 1 > maxLength {			maxLength = i - start + 1		}		lastOccurred[ch] = i	}	return  maxLength}func main() {	// 寻找最长不含有重复字符的子串	fmt.Println(lengthOfNonRepeatingSubStr("abcabcbb"))	fmt.Println(lengthOfNonRepeatingSubStr("bbbbbbbb"))	fmt.Println(lengthOfNonRepeatingSubStr("pwwkew"))	fmt.Println(lengthOfNonRepeatingSubStr(""))	fmt.Println(lengthOfNonRepeatingSubStr("b"))	fmt.Println(lengthOfNonRepeatingSubStr("abcdefg"))	fmt.Println(lengthOfNonRepeatingSubStr("易山博客测试"))	fmt.Println(lengthOfNonRepeatingSubStr("一一一二"))}golang313017115复制代码

13.string

package mainimport (	"fmt"	"unicode/utf8")func main() {	s:= "hello易山"  // UTF-8 english1 china3	for _,b := range []byte(s) {		fmt.Printf("%X " , b)	}	fmt.Println()	for i,ch := range s { // ch is a rune		fmt.Printf("(%d %X)",i,ch)	}	fmt.Println()	fmt.Println(utf8.RuneCountInString(s))	//68 65 6C 6C 6F E6 98 93 E5 B1 B1	//(0 68)(1 65)(2 6C)(3 6C)(4 6F)(5 6613)(8 5C71)	//7}复制代码

14,面向对象

go 语言仅支持封装,不支持继承和多态

package mainimport "fmt"type treeNoe struct {	value int	left,right *treeNoe}func (node treeNoe) print() {	fmt.Print(node.value, " ")}func (node *treeNoe) setValue(value int) {	node.value = value}func (node *treeNoe) traverse() {	if node == nil {		return	}	// 中序便利	node.left.traverse()	node.print()	node.right.traverse()}// 公创函数func createNode(value int) *treeNoe  {	return &treeNoe{value:value}}func main() {	var root treeNoe	root = treeNoe{value:3}	root.left = &treeNoe{}	root.right = &treeNoe{
5, nil,nil} root.right.left = new(treeNoe) root.left.right = createNode(2) nodes := []treeNoe{ {value:3}, {}, {
6,nil,nil}, } fmt.Println(root,"\n",nodes) root.right.left.setValue(4) //root.right.left.print() //fmt.Println() // //Proot := &root //Proot.print() //Proot.setValue(100) //Proot.print() root.traverse()}复制代码

15.包和封装

16.扩充已有类型

17.接口的实现

18.实现简单的一个接口请求

19.函数式编程闭包

package mainimport "fmt"func adder() func(int) int {	sum := 0	return func(v int) int {		sum += v		return sum	}}type iAdder func(int) (int, iAdder)func adder2(base int) iAdder {	return func(v int) (int, iAdder) {		return base + v, adder2(base + v)	}}func main() {	//a := adder()	//for i:=0;i<10;i++{
// fmt.Println(a(i)) //} a := adder2(0) for i:=0;i<10;i++ { var s int s, a = a(i) fmt.Printf("%d\n", i, s) }}复制代码

20.斐波那契数列(闭包)

​ 这里就放一张我在 力扣 做的解答题

21.服务器统一处理

当我们启动服务的时候就是这样的(正确的)

错误的

Blog: 易山博客

版权:本文仅限学习,不涉及商业学习(转载需注明出处)

出处:易山博客 URL:https:ladies.ren/

转载于:https://juejin.im/post/5cde0e3c5188255bf3148694

你可能感兴趣的文章
Hdu1396
查看>>
[环境搭建]mininet中实现随机流量模型,20180130
查看>>
22个Photoshop网页设计教程网站推荐
查看>>
zencart单独屏蔽左右边栏代码
查看>>
管理Apache服务器访问日志
查看>>
jQuery on()方法
查看>>
Codeforce922B (Magic Forest)
查看>>
钩子函数和回调函数的区别
查看>>
SilverLight控件样式及控件模版
查看>>
MVC在添加控制器的时候发现没有添加的选项了?肿么办?
查看>>
阿里云centos7使用yum安装mysql的正确姿势
查看>>
我学UML建模系列之《准备篇》
查看>>
Python基本数据类型(字符串)
查看>>
hdoj1394(归并排序)
查看>>
配置Apache2 管理 SVN
查看>>
hihocoder 1323 回文字符串(字符串+dp)
查看>>
RabbmitMQ集群配置
查看>>
PMP考试终于结束了。。。
查看>>
牛客网暑期ACM多校训练营(第六场) A Singing Contest
查看>>
APP接口开发集成阿里云OSS文件处理
查看>>