3.1.goland中项目结构

(1)在goland中创建标准Go项目

(2)goland配置

创建项目Learn-Go

file-settings-go-GOPATH-添加

在项目目录下创建src目录,在src目录下创建demo目录,在demo目录下创建demo.go文件

//Learn_Go/src/demo/demo.go
package demo import "fmt" func Demo() {
fmt.Println("执行demo")
} 

在项目目录下创建main.go文件

//Learn_Go/main.go
package main import "demo" func main() {
demo.Demo() //执行demo
}

 目录结果

点项目右键-->>run-->>go_build Learn_Go

3.2.包和包级别访问权限

同一个包内小写可以访问,其它包要想访问必须大写

目录结果

demo1.go

//Learn_Go/src/demo/demo1.go
package demo import "fmt" func demo1() {
fmt.Println("执行demo111")
}

demo2.go

//Learn_Go/src/demo/demo2.go
package demo import "fmt" func Demo2() {
fmt.Println("执行demo222")
demo1() //同包内可以访问,不需要大写
}

main.go

//Learn_Go/main.go
package main import "demo" func main() {
demo.Demo2()
} //结果
执行demo222
执行demo111

3.3.闭包

闭包就是解决局部变量不能被外部访问一种解决方案,在函数内部定义局部变量,把另一个函数当中返回值,局部变量

对于返回值函数就相当于全局变量,所以多次调用返回值函数局部变量的值跟随变化。

//Learn_Go/main.go
package main import "fmt" func closure() func()int{
i := 1
return func() int {
i = i+1
return i
}
} func main() {
f := closure()
fmt.Println(f()) //2
fmt.Println(f()) //3
fmt.Println(f()) //4
}

3.4.值传递和引用传递

讨论值传递和引用传递时,其实就是看值类型变量和引用类型变量作为函数参数时,修改

形参是否会影响到实参,在Go语言中五个引用类型变量,其它都是值类型

  • slice
  • map
  • channel
  • inrerface
  • fun()

引用类型作为参数时,称为浅拷贝,形参改变,实参数跟着变化,因为传递的是地址,形参和实参都指向同一块地址

值类型作为参数时,称为深拷贝,形参改变,实参不变,因为传递的是值的副本,形参会新开辟一块空间,与实参指向不同

如果希望值类型数据在修改形参时实参跟随变化,可以把参数设置为指针类型

//Learn_Go/main.go
package main import "fmt" //int,string:值类型 切片和指针可以改变值
func demo(i int, s string, arr []int, content *int) {
i = 110
s = "derek"
arr[0] = 3
arr[1] = 4
*content = 110
} func main() {
a := 119
b := "jack"
c := []int{1,2}
d := 119
demo(a,b,c,&d)
fmt.Println(a,b,c,d) //119 jack [3 4] 110
}

  

3.GO-项目结构、包访问权限、闭包和值传递引用传递的更多相关文章

  1. 再谈包访问权限 子类为何不能使用父类protected方法

    可见范围 权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫做可见范围 访问控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限(没有关键词) ...

  2. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  3. Java程序员的日常 —— 《编程思想》包和访问权限

    包的作用 在C++中有命名空间的概念,这是因为,不同的项目或者人写出来的代码,可能名称是一样的.比如,java.util中有List,java.awt中也有List,那么我们在开发中,怎么会知道使用的 ...

  4. thinkinginjava学习笔记05_访问权限

    Java中访问权限等级从大到小依次为:public.protected.包访问权限(没有关键词).private: 以包访问权限为界限,public.protected分别可以被任意对象和继承的对象访 ...

  5. 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制

    包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...

  6. 章节五、2-Package包和权限修饰符

    一.Package包 为了更好的组织类,java提供了包机制,用于区别类名的命名空间. 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了 ...

  7. Java 访问权限控制:你真的了解 protected 关键字吗?

    摘要: 对于类的成员而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词有四类:private,无(包访问 ...

  8. 【Thinking in Java, 4e】访问权限控制

    [包:库单元] 编译单元的概念. 一个.java文件就是一个编译单元,一个编译单元只能有一个public类,编译单元中的非public类一般是用于为public类提供支持的,这些类在包外不可见. im ...

  9. Java基础—访问权限控制

    Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...

随机推荐

  1. navicat远程连接mysql的方法

    navicat远程连接mysql的方法1 先在打开phpmyadmin 添加用户 用户名和密码自己设置 设置如下 2 关闭防火墙service iptables status可以查看到iptables ...

  2. 用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...

  3. Oracle 原生驱动带来的精度问题的分析与解决

    问题 Oracle 官方提供了 dotnet core 驱动,但我们在使用中遇到了精度问题. 复现 以下代码运行数学运算 1/3,无论是 OracleCommand.ExecuteScalar() 还 ...

  4. 基于Spark的电影推荐系统(推荐系统~4)

    第四部分-推荐系统-模型训练 本模块基于第3节 数据加工得到的训练集和测试集数据 做模型训练,最后得到一系列的模型,进而做 预测. 训练多个模型,取其中最好,即取RMSE(均方根误差)值最小的模型 说 ...

  5. window10 蓝牙怎么连接音响或蓝牙耳机

    window10 蓝牙怎么连接音响或蓝牙耳机 1.在电脑上依次点击win图标右键-->设置,打开系统设置窗口. 2.点击“设备”,在窗口左侧选择“蓝牙”,右侧检查并开启电脑的蓝牙设备开关, 3. ...

  6. QLineEdit默认提示 setPlaceholderText

    Setting this property makes the line edit display a grayed-out placeholder text as long as the text( ...

  7. Android内部存储与外部存储的文件操作类

    public class SDCardHelper { // 判断SD卡是否被挂载 public static boolean isSDCardMounted() { // return Enviro ...

  8. Python Scrapy在windows上的安装方法

    如果想要学习爬虫,肯定会了解Scrapy,但安装Scrapy的方法相对于安装其他第三方库麻烦一点. 下面总结一下在我的电脑上安装Scrapy的方法,我的电脑是Windows10,32位操作系统.有如下 ...

  9. 利用javascript动态加载头部出现点击事件与hover事件无效解决方法

    这里是利用es6的promise函数来异步加载,当HTML动态加载过去的HTML片段加载完毕再执行绑定事件的js代码: 具体过程如下 这里是用了jQuery框架的例子 $(function(){ // ...

  10. 【PHP】关于系统性能追踪工具molten

    一.简介 关于molten的介绍网上有很多,是一个全链路追踪的工具,Molten可以看做是phptrace的的升级版(流行的php问题定位工具譬如phptrace,xhprof,这些工具可以自行Goo ...