go语言细节
1 数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。
package main import (
"fmt"
) func main() {
//数组
a1 := []int{, , }
a2 := a1
a2[] =
fmt.Println(a1) //print: 1 2 3
fmt.Println(a2) //print: 2 2 3
// 字符串
s1 := ""
s2 := s1
s2 = ""
fmt.Println(s1) //print 123
fmt.Println(s2) //print 223
// 切片
slice1 := []int{, , }
slice2 := slice1
slice2[] =
fmt.Println(slice1) //print 2 2 3
fmt.Println(slice2) //print 2 2 3
// map
m1 := make(map[int]string)
m1[] = ""
m2 := m1
m2[] = ""
fmt.Println(m1) //print 1:2
fmt.Println(m2) //print 1:2
// chan
c1 := make(chan bool)
c2 := c1
go func() {
v := <-c2
fmt.Println(v) //print true
}()
c1 <- true
}
2 byte为uint8类型,string不是[]byte或[]rune类型。
package main import (
"fmt"
) func main() {
s := "hello world"
var i interface{} = s switch i.(type) {
case []byte:
fmt.Println("string type is []byte")
case []rune:
fmt.Println("string type is []rune")
case []int8:
fmt.Println("string type is []int8")
} slice := []byte{, }
i = slice
switch i.(type) {
case []uint8:
fmt.Println("byte is uint8")//print
}
}
3 接口为类型和值的二元组,nil类型为空且值为空。
package main import (
"fmt"
) func trueNil() interface{} {
return nil
} func falseNil() interface{} {
var ret *int = nil // 此nil带有类型
return ret
}
func main() {
if trueNil() == nil {
fmt.Println("trueNil") //print trueNil
} if falseNil() == nil {
fmt.Println("falseNil") //no print
}
}
4 slice,map操作多协程需要加锁。
package main import (
"math/rand"
"sync"
"time"
) func main() {
Map := make(map[int]int)
wg := &sync.WaitGroup{} for i := ; i < ; i++ {
go func() {
wg.Add()
defer wg.Done()
for j := ; j < ; j++ {
Map[rand.Int()] = rand.Int()
time.Sleep(time.Millisecond)
}
}()
}
time.Sleep(time.Second * )
wg.Wait()
// 程序崩溃
}
5 defer 调用函数时,函数在当前函数结束前调用,但传给调用函数的参数在defer所在行确定,而不在调用是确定。存在多个defer时,先出现后调用。
package main import (
"fmt"
) type Data struct {
data string
} func Println(data Data) {
fmt.Println(data.data)
}
func main() {
data := Data{"world "}
defer Println(data)
data.data = "hello "
defer Println(data)
// 输出: hello world 而不是: hello hello 或 world hello
}
go语言细节的更多相关文章
- C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
- C语言细节——献给初学者(二)
C语言细节——献给初学者(二) 主题 循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...
- C语言细节——献给入门者(一)
C语言细节——献给入门者(一) 主题 输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- [转载] C语言细节,写的非常棒!
这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...
- 程序员之---C语言细节12(指针和数组细节,"//"的可移植性说明)
主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...
- C语言细节注意
前段时间用C语言写了个小的程序,也算是复习了下好久没有用的C语言.也是有好多的坑了,哈哈. 1.C语言的结构体 结构体的命名最好能够做到规范.因为不同的 编译环境下,不是很规范的命名有时候会导致莫名其 ...
- 程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)
主要内容:由/* */ 引起的凝视错误 有4处凝视错误 #include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #defin ...
- C语言细节笔记2
C语言常见问题笔记: 1. 指针的声明 char * p1, p2; p1 是一个指向char类型的指针,而p2是一个char类型变量 这是由于 * 并不是基本类型的一部分,而是包含 ...
- C语言细节笔记1
/******************************************************************************* ——笔记 1. 函数申明的书写. 可以 ...
随机推荐
- Delphi 记事本 TMemo
Windows记事本记事本 描述: 用Delphi模仿的Windows记事本 界面和功能都和Windows的记事本一样,是用Memo实现的而不是RichEdit 可以执行以下功能 文件 ...
- collectionViewFlow的界面编写
#import <UIKit/UIKit.h> //这边我们会创建一个scrollView的界面,这个scrollView里面有三张图片构成,我们使用下面的枚举方式来定义这三个位置 typ ...
- IOS的工程目录结构和生命周期
IOS的工程目录结构和生命周期 ·simple table文件夹:工程相关源代码和配置文件 BIDAppDelegate : 委托的声明和实现 BIDViewController: 视图控 ...
- Linux chmod
在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做. 语法如下: chmod [who] [+ | - | =] [mode] 文件名 命令中各选项的含义为 u 表示 ...
- 第五篇:python基础之循环结构以及列表
python基础之循环结构以及列表 python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...
- partial局部类
局部类型允许我们将一个类.接口或结构分成好几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1)类型特别大,不宜放在一个文件中实现. (2)一个类型中的一部分代码为自动化工具生 ...
- JS escape()、encodeURI()和encodeURIComponent()的区别
1.实例说明: var url='http://wx.jnqianle.com/content/images/冰皮月饼.jpg?name=张三丰&age=11'; console.info(w ...
- C#和asp.net中链接数据库中 参数的几种传递方法
#region 参数传递方法第一种 //参数设置方法(第一种) //SqlParameter sp = new SqlParameter("@Name", str_Name); / ...
- 在xcode6.1和ios10.10.1环境下实现app发布
之前写过在xcode6.1和ios10.10.1环境下实现真机测试,以及最近提交的app一直在审核当中,所以木有发布如何实现app发布来分享给大家.刚好昨天app审核通过了,所以就分享一篇如何实现ap ...
- Objective - C 中NSString (字符串)与C中的字符串转换问题
NSString是一个常用的类,NSString是原生支持unicode C中的字符串 比如char * a = "hello world"; 是utf8类型的, char* d ...