2.冒泡排序(二维数组使用):

func main() {
i := 1
MYLABEL:
for {
i++
if i > 3 {
break MYLABEL
}
} fmt.Println("MYLABEL")
} // Label名称随意,必需写在for循环前面

  

2.冒泡排序(数组使用):

func main() {
var arr [6]int = [6]int{1, 9, 8, 500, 45, 2}
arrSize := len(arr)
for i := 0; i < arrSize; i++ {
//fmt.Println(arr)
for j := i; j < arrSize; j++ {
if arr[i] < arr[j] {
tmp := arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
}
} fmt.Println(arr)
}

  

3.slice扩容引起的问题:
切片的数据结构:

slice在扩容会生成一个新的slice,再将原来的slice拷贝到新的slice,然后append.这将导致元素的地址发生变化.
示例:

func main() {
slice := make([]int, 2, 5)
slice[0] = 10
slice[1] = 20
fmt.Printf("%p\n", slice)
slice = append(slice, 1, 2, 5, 6)
fmt.Printf("%p", slice)
}

因为有扩容,两次打印的slice数组的地址不一致.

slice作为函数参数时,传递了一个引用,我们append一个元素后,期望得到增加元素的slice,但事实上并没有:

func main() {
slice := make([]int, 0)
changeSlice(slice)
fmt.Println(slice)
} func changeSlice(slice []int) {
slice = append(slice, 10)
} // 输出: [],并没有增加元素这是因为切片扩容,导致了数组地址发生了变化.

所以应该将以上代码改为让其返回slice,并赋值:

func main() {
slice := make([]int, 0)
slice = changeSlice(slice)
fmt.Println(slice)
} func changeSlice(slice []int) []int {
slice = append(slice, 10)
return slice
}

  

4.switch type的一个例子:

type Phone interface {
Call()
} type Android struct {
name string
} func (android *Android) Call() {
fmt.Println(android.name)
} func main() {
android := &Android{name: "LG"}
HangUp(android)
} func HangUp(all Phone) {
switch v := all.(type) {
case *Android:
fmt.Println("HangUp", v.name)
default:
fmt.Println("unknow device")
}
}

  

使用断言:

func HangUp(all Phone) {
if a, ok := all.(*Android); ok {
fmt.Println(a.name)
return
}
fmt.Println("unknow device")
}

  

5.fallthrough:

fallthrough强制执行后面的case代码,fallthrough不会判断下一条case的expr结果是否为true

func main() {
a := 1
switch a {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
default:
fmt.Println("no match")
}
} // 输出1 2, 第二个case并没有判断a是不是等于2

  

6.goroutine同步:sync

import (
"fmt"
"runtime"
"sync"
) func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 10; i++ {
go work(&wg, i)
}
wg.Wait()
} func work(wg *sync.WaitGroup, index int) {
fmt.Println(index)
wg.Done()
}

 

golang一些知识点的更多相关文章

  1. golang 特殊知识点

    golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...

  2. golang 小知识点记录

    获取url中的参数及输出到页面的几种方式 func SayHello(w http.ResponseWriter, req *http.Request) { req.Method //获取url的方法 ...

  3. Golang 知识点总结

    Golang 知识点总结 目录 [−] 各种类型复制的时候的花费 可使用内建函数的类型 (len.cap.close.delete.make) 内建容器类型的值比较 组合类型T{...}的值比较 零值 ...

  4. Golang知识点整理

    1. Golang 1.1 golang知识点大纲 1.2 指针 1.3 Golang使用validator进行数据校验及自定义翻译器 1.4 Golang GC(垃圾回收机制) 2.框架 2.1 G ...

  5. Golang 数组 切片 字典 基本知识点

    数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...

  6. 来自朝鲜的问候 golang入坑系列

    鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...

  7. Golang的CSP很酷?其实.NET也可以轻松完成

    说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...

  8. golang使用通道模仿实现valatile语义

        golang团队在sync中提供了很多的原子操作函数,将原子操作转向由单独一个包提供,而不是像Java那样提供各种累,确实上手得更加简单.但是golang原生提供的并发操作没有Java来得丰富 ...

  9. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

随机推荐

  1. Redis特性

    Redis特性和应用场景 Redis特性 速度快 Redis使用标准C编写实现,而且将所有数据加载到内存中,所以速度非常快.官方提供的数据表明,在一个普通的Linux机器上,Redis读写速度分别达到 ...

  2. UVa10891 Game of Sum

    给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取.两人都采用最优策略,A先手,问A和B各自得到数字的和的差值最大为多少? 区间DP F[i][j]表示区间i~j内A能得到的最大数 ...

  3. Java并发笔记(一)

    1. lock (todo) 2. 写时复制容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个 ...

  4. mysql [MariaDB] 开启外联

    1.查看mysql服务端口是否为外部端口,如果监听的是本地端口修改mariadb配置文件 root@kali:~# whereis mysql mysql: /usr/bin/mysql /etc/m ...

  5. EVERYTHING 1.3.4参数

    命令行参数 操作符:     space    与 (AND)     |    或 (OR)     !    非 (NOT)     < >    分组     " &quo ...

  6. [Oracle] 关系型数据库排序算法和数据结构以及关联查询

    关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...

  7. EditText双光标问题

    模拟器会出现中双的光标   从没有字符开始输入多了一个竖线怎么回事?光标丢失就好了,下面是手机情况 修改样式更换一个样式试试看:比如我以前的是 android:theme="@android ...

  8. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  9. PSR-2 编码风格规范

    本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合作时,就需要一 ...

  10. Python_Tips[0] -> 关于 import

    关于 import 1 import import可用于导入一个Python的标准模块,包括.py文件或带有__init__.py的文件目录. 在Python中,import一个模块后,若再次impo ...