golang一些知识点
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一些知识点的更多相关文章
- golang 特殊知识点
golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...
- golang 小知识点记录
获取url中的参数及输出到页面的几种方式 func SayHello(w http.ResponseWriter, req *http.Request) { req.Method //获取url的方法 ...
- Golang 知识点总结
Golang 知识点总结 目录 [−] 各种类型复制的时候的花费 可使用内建函数的类型 (len.cap.close.delete.make) 内建容器类型的值比较 组合类型T{...}的值比较 零值 ...
- Golang知识点整理
1. Golang 1.1 golang知识点大纲 1.2 指针 1.3 Golang使用validator进行数据校验及自定义翻译器 1.4 Golang GC(垃圾回收机制) 2.框架 2.1 G ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- 来自朝鲜的问候 golang入坑系列
鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...
- Golang的CSP很酷?其实.NET也可以轻松完成
说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...
- golang使用通道模仿实现valatile语义
golang团队在sync中提供了很多的原子操作函数,将原子操作转向由单独一个包提供,而不是像Java那样提供各种累,确实上手得更加简单.但是golang原生提供的并发操作没有Java来得丰富 ...
- golang 中 string 转换 []byte 的一道笔试题
背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...
随机推荐
- 1257 背包问题 V3——分数规划
N个物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数),从中选出K件物品(K <= N),使得单位体积的价值最大. Input 第1 ...
- 【CF1017F】The Neutral Zone(Bitset,埃氏筛)
题意: 思路:From https://blog.csdn.net/CSDNjiangshan/article/details/81536536 #include<cstdio> #inc ...
- (八)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] ...
- C++文件(夹)选择对话框
由于各种应用,我们需要调用系统的打开文件对话框或者打开文件夹对话框,或两者兼有.今遇到这个情况已经解决,特写下这篇博文. 1.打开文件对话框常用的方法是使用系统的CFileDialog.这里介绍另外一 ...
- 原生JavaScript实现jQuery的hasClass,removeClass,addClass,toggleClass
介绍: 1.hasClass:判断DOM元素是否存在类. 2.addClass:为的DOM元素添加类. 3.removeClass:删除DOM元素的类. 4.toggleClass:如果DOM元素存在 ...
- App接口加密解密方法
//加密 function encrypt($data) { $key = md5("safregr"); $str = base64_encode($data); $res = ...
- android 调用系统相机崩溃的解决方案
解决方案: 1.(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限. 不用修改原有代码,在Application的oncreate方法中: if (Build.VERSIO ...
- jquery导出Excel表格
1.引用js插件 <script src="tableExport.js"></script> <script src="jquery.ba ...
- Properties文件工具读取类
import java.io.IOException;import java.io.InputStream;import java.util.Properties; public class Comm ...
- Python的支持工具[0] -> 环境包管理工具[0] -> pip
pip包管理工具 / pip Package Management Tools pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具. 1 pip ...