Golang 语言特性
1. 函数
与c 语言不同,go 语言中,函数的参数和返回值都由栈来存储。
传值:函数调用时会复制参数,被调用方和调用方持有两份不相关的两份数据
传引用:函数调用时会传递参数指针,被调用方和调用方持有相同的数据,任意一方做出修改都会影响另一方
- 不同的语言选择不同的方式传递参数,go函数的参是传值类型。无论是传递基本类型,结构体还是指针,都会对传递的参数进行复制。
- 将指针作为参数传入函数时,函数内部会复制指针,也就是会同时出现两个指针指向原有的内存空间,因此 go 语言中传指针本质上也是传值。
- 如果值参数大小比较大,比如长数组,那么copy 参数内容会对性能造成很大的影响。此时,传指针类型性能更好一些。
package main
import (
"encoding/json"
"fmt"
)
type s1 struct {
// 字段小写开头是不能被外界访问到的,json 序列化取不到值。这种称为小写开头的字段称为私有属性。
Name string
Age int
}
type s2 struct {
Addr string
Married bool `json:"married"` // 结构体 tag
}
type s3 struct {
Hobby string
// 结构体嵌套
FromS1 s1
// 结构体匿名嵌套
s2 // 架构体的匿名字段
}
func main() {
// 1. 结构体初始化
var s s3
s.Hobby = "Games"
//s.fromS1 = s1{name: "siri",age: 18}
s.FromS1.Name = "siri"
s.FromS1.Age = 18
s.s2.Addr = "Beijing"
s.s2.Married = false
fmt.Println(s)
data,_ := json.Marshal(s)
fmt.Printf("%s\n",data)
// 2. 匿名结构体。即 非 type 关键字声明的结构体
var p struct{
name string
age int
}
p.name = "Bob"
p.age = 19
fmt.Println(p)
// 3. 指针类型的方法
ss := s1{Name: "jeans",Age: 20}
ss.ChangeName("Bill",80)
fmt.Println(ss) // 名字和年龄被修改了
}
func (s *s1)ChangeName(name string,age int) {
s.Name = name
s.Age = age
}
Golang 语言特性的更多相关文章
- golang语言特性
1. 垃圾回收 a. 内存⾃动回收,再也不需要开发⼈员管理内存 b. 开发人员专注业务实现,降低了心智负担 c. 只需要new分配内存,不需要释放 2. 天然并发 a. 从语⾔层面⽀持并发,⾮常简 ...
- Go golang语言特性
一.垃圾回收 1.内存自动回收. 2.只需要创建,不需要释放 二.天然并发: 1.语言层支持并发,对比python,少了GIL锁. 2.goroute,轻量级线程. 3.基于CSP模型实现 三.cha ...
- Go语言特性
1.入口,go有且只有一个入口函数,就是main函数 liteide (IDE)的 一个工程(文件夹)只能有且只有一个main函数 package main import "fmt" ...
- Atitit.go语言golang语言的新的特性 attilax总结
Atitit.go语言golang语言的新的特性 attilax总结 1. 继承树less 动态接口1 1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍. q 自动垃圾回收 ...
- Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性
一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...
- 补充2:Golang 一些特性
Go语言的这些地方都做的还不错: 拥有自动垃圾回收: 不用手动释放内存 一个包系统: Go 语言的源码复用建立在包(package)基础之上.包通过 package, import, GOPATH 操 ...
- Golang语言快速上手到综合实战高并发聊天室
需要的联系我:QQ:1844912514 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言.2015,Go迎来了全迸发的一年.时隔一年,回头再看,Go已跻身主流编程语言行列. ...
- scala 语言特性
Scala 语言特性 Unit 表示无值, 等价于java, C++中的void Null 表示空值或空引用 Nothing 所有其他类型的子类型, 表示没有值 Any 所有类型的超类, 任何实例都属 ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
随机推荐
- Java线程--LockSupport使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871805.html Java线程--LockSupport使用 public static ...
- Ansible 自动化运维——剧本(playbook)
Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...
- Java 给Word每一页设置不同文字水印效果
Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以Ja ...
- Mybatis动态开发
1.单表动态SQL之if 2.单表动态SQL之foreach 3.单表动态SQL之片段抽取 Sql 中可将重复的 sql 提取出来,使⽤时⽤ include 引⽤即可,最终达到 sql 重⽤的⽬的
- 零基础自学Python十天的时候,写的一款猜数字小游戏,附源码和软件下载链接!
自学一门语言最重要的是要及时给自己反馈,那么经常写一些小程序培养语感很重要,写完可以总结一下程序中运用到了哪些零散的知识点. 本程序中运用到的知识点有: 1.输入输出函数 (input.print) ...
- [Java]程序运行时的内存分配
本文出处:<Thinking in JAVA> 寄存器这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制 ...
- 在线快速匹配IP
网址 http://www.bejson.com/othertools/regex/ 正则表达式:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 演示 登录http:// ...
- 【C#基础概念】程序集Assembliy
一. 程序集定义 二. 程序集结构 通常,静态程序集可能由以下四个元素组成: 程序集清单(manifest) 类型元数据metadata和程序集元数据. 实现这些类型的 Micro ...
- VisualStudio2019 利用代码片段管理器新建快捷命令
原文:https://www.cnblogs.com/huguodong/p/12694902.html 一.前言 VisualStudio 可以通过敲出缩写字符串,然后按两次Tab按键自动展开成一段 ...
- windows系统如何远程桌面连接
转至:https://jingyan.baidu.com/article/67662997adb46a54d51b84bd.html 远程桌面连接是一种通过网络技术,远程操作另一台电脑的过程,随着wi ...