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. 1257 背包问题 V3——分数规划

    N个物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数),从中选出K件物品(K <= N),使得单位体积的价值最大. Input 第1 ...

  2. 【CF1017F】The Neutral Zone(Bitset,埃氏筛)

    题意: 思路:From https://blog.csdn.net/CSDNjiangshan/article/details/81536536 #include<cstdio> #inc ...

  3. (八)ubuntu安装软件提示:Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

    question: ubuntu@ubuntu:/usr/src/Linux-headers-3.5.0-23-generic$ sudo apt-get install cheese [sudo] ...

  4. C++文件(夹)选择对话框

    由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有.今遇到这个情况已经解决,特写下这篇博文. 1.打开文件对话框常用的方法是使用系统的CFileDialog.这里介绍另外一 ...

  5. 原生JavaScript实现jQuery的hasClass,removeClass,addClass,toggleClass

    介绍: 1.hasClass:判断DOM元素是否存在类. 2.addClass:为的DOM元素添加类. 3.removeClass:删除DOM元素的类. 4.toggleClass:如果DOM元素存在 ...

  6. App接口加密解密方法

    //加密 function encrypt($data) { $key = md5("safregr"); $str = base64_encode($data); $res = ...

  7. android 调用系统相机崩溃的解决方案

    解决方案: 1.(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限. 不用修改原有代码,在Application的oncreate方法中: if (Build.VERSIO ...

  8. jquery导出Excel表格

    1.引用js插件 <script src="tableExport.js"></script> <script src="jquery.ba ...

  9. Properties文件工具读取类

    import java.io.IOException;import java.io.InputStream;import java.util.Properties; public class Comm ...

  10. Python的支持工具[0] -> 环境包管理工具[0] -> pip

    pip包管理工具 / pip Package Management Tools pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具. 1 pip ...